Наблюдаемая проверка RxJs subscribeTo.js работает в Chrome, но не работает в Chrome Incognito, MS Edge и Firefox - PullRequest
0 голосов
/ 13 декабря 2018

В моем проекте Anguar (7) я использую наблюдаемый при редуксе для выполнения моих избыточных побочных эффектов.

Мой код работает в Chrome, но точныйтакая же сборка не удалась в Chrome Incognito, MS Edge и Firefox.Я получаю следующую ошибку:

ERROR TypeError: You provided an invalid object where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.
    at subscribeTo (subscribeTo.js:58)
    at from (from.js:17)
    at MergeMapSubscriber.project (createEpicMiddleware.js:36)
    at MergeMapSubscriber.push.../../../node_modules/rxjs/_esm5/internal/operators/mergeMap.js.MergeMapSubscriber._tryNext (mergeMap.js:61)
    at MergeMapSubscriber.push.../../../node_modules/rxjs/_esm5/internal/operators/mergeMap.js.MergeMapSubscriber._next (mergeMap.js:51)
    at MergeMapSubscriber.push.../../../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.next (Subscriber.js:54)
    at MapSubscriber.push.../../../node_modules/rxjs/_esm5/internal/operators/map.js.MapSubscriber._next (map.js:41)
    at MapSubscriber.push.../../../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.next (Subscriber.js:54)
    at Subject.push.../../../node_modules/rxjs/_esm5/internal/Subject.js.Subject.next (Subject.js:47)
    at Function.epicMiddleware.run (createEpicMiddleware.js:62)
    at SafeSubscriber._next (redux.configuration.ts:50)

Как видите, ошибка генерируется в createEpicMiddleware redux-observable, и это вызвано проверкой в ​​RxJs subscribeTo.js .

Затем я попытался покопаться в subscribeTo.js , прочитав ответ от этого потока GitHub .В конце этого пользователь Agraphie комментирует, что проверка в subscribeTo.js не удалась.Я проверил это, и, конечно же, проверка работает в стандартном Chrome, но не во всех других браузерах.Мой проверочный код, добавленный в subscribeTo.js, выглядит следующим образом:

export var subscribeTo = function (result) {
    if (isObservable(result)) {
        result.pipe(filter(x => x && x.type === 'GET_PLATFORM_SUCCESS')).subscribe(x => {
            console.log('Incoming value', result);
            console.log(`result && typeof result[Symbol_observable] === 'function': \n`, result && typeof result[Symbol_observable] === 'function');
            console.log('---------------------------')
        });
    }
    ...

Результат можно увидеть на скриншоте ниже (слева - стандартный Chrome, справа - Chrome Incognito)

enter image description here

Обратите внимание, что наблюдаемое - это наблюдаемое.Он даже проходит собственный тест RxJs isObservable.Так почему же он проваливает проверки ниже?

Если вы посмотрите выше, вы увидите, что proto входящей наблюдаемой выглядит по-разному с левой и правой стороны.Точнее, левая сторона обладает свойством функции Symbol(observable): f (), а правая - нет.Наоборот, правая сторона имеет @@observable: f ().

Короче говоря, проверка result && typeof result[Symbol_observable] === 'function' является причиной ошибки, поскольку Symbol_observable отсутствует.Насколько я вижу.

Зависимости и версии

Я использую

  • Угловой 7.0.2
  • rxjs 6.3.3
  • rxjs-compat 6.3.3
  • redux-observable 1.0.0 (они используют rxjs 6 - package.json )).

Мои вопросы

Почему это происходит?Как я могу это исправить?

Я смотрел на символ-наблюдаемый , но я не уверен, как его использовать, или если это даже хорошее решение.

Ответы [ 2 ]

0 голосов
/ 08 июля 2019

У меня была такая же проблема с rxjs/index.

, изменяющимся с:

import { of, from, combineLatest, ... } from `rxjs/index`

на:

import { of, from, combineLatest, ... } from `rxjs`

Исправлено.

Удачи:)

0 голосов
/ 08 марта 2019

У меня была та же проблема, с почти такой же конфигурацией.

После некоторых исследований я проверил весь импорт и изменил весь импорт с (rxjs/internal/operators)

import { catchError, flatMap, map, skipWhile } from 'rxjs/internal/operators';

на (rxjs/operators)

import { catchError, flatMap, map, skipWhile } from 'rxjs/operators';

Исправлена ​​проблема с Firefox, Chrome Incognito, ...

Cheers

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...