В моем проекте 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)
Обратите внимание, что наблюдаемое - это наблюдаемое.Он даже проходит собственный тест 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 )).
Мои вопросы
Почему это происходит?Как я могу это исправить?
Я смотрел на символ-наблюдаемый , но я не уверен, как его использовать, или если это даже хорошее решение.