RxJs subscribeTo.js 可观察检查在 Chrome 中有效,但在 Chrome Incognito、MS Edge 和 Firefox 中失败

RxJs subscribeTo.js observable check works in Chrome, but fails in Chrome Incognito, MS Edge, and Firefox

在我的 Anguar(7) 项目中,我使用了 redux-observable to do my redux 副作用。

我的代码在 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)

如你所见,错误是在redux-observable的createEpicMiddleware中抛出的,这是在RxJs中检查导致的subscribeTo.js.

在阅读了来自 这个 GitHub 线程 的回复后,我试图深入研究 subscribeTo.js。最后,用户 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隐身)

注意 Observable 是一个可观察对象。它甚至通过了 RxJs 自己的 isObservable 测试。那么为什么它没有通过下面的检查呢?

如果你仔细观察上面,你可以看到传入的 Observable 的 proto 看起来与左侧和右侧不同。更准确地说,左边有函数 属性 Symbol(observable): f (),而右边没有。相反,右边有@@observable: f ().

简而言之,检查 result && typeof result[Symbol_observable] === 'function' 是错误的原因,因为缺少 Symbol_observable。据我所知。

依赖项和版本

我用

我的问题

为什么会这样? 我该如何解决?

我看过 symbol-observable,但我不确定如何使用它,或者这是否是一个好的解决方案。

我遇到了同样的问题,配置几乎相同。

经过一些研究,我检查了所有导入并更改了来自 (rxjs/internal/operators)

的所有导入
import { catchError, flatMap, map, skipWhile } from 'rxjs/internal/operators';

至 (rxjs/operators)

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

这解决了 Firefox 的问题,Chrome 隐身,...

干杯

我遇到了与 rxjs/index 相同的问题。

更改自:

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

至:

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

已修复。

祝你好运:)