Angular RxJs subscribeTo.js observable check在Chrome中工作,但在Chrome Incognito、MS Edge和Firefox中失败
在我的Anguar7项目中,我经常做我的副作用 我的代码在Chrome上运行,但在Chrome Incognito、MS Edge和Firefox上完全相同的构建失败。我得到的错误如下:Angular RxJs subscribeTo.js observable check在Chrome中工作,但在Chrome Incognito、MS Edge和Firefox中失败,angular,redux,rxjs,redux-observable,Angular,Redux,Rxjs,Redux Observable,在我的Anguar7项目中,我经常做我的副作用 我的代码在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
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中的检查引起的
然后,我在阅读了一篇文章的回复后,试图深入研究这个问题。最后,用户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('---------------------------')
});
}
...
结果可以在下面的屏幕截图中看到左侧是标准镀铬,右侧是不知名镀铬
注意,可观察的是可观察的。它甚至通过了RxJs自己的isObservable测试。那么为什么它没有通过下面的检查呢
如果你仔细看上面,你可以看到,进入的可观测对象的原型从左边和右边看是不同的。更准确地说,左侧有函数属性Symbolobservable:f,右侧没有。相反,右边有@@observable:f
简而言之,检查结果&&typeof result[Symbol\u observable]==“function”是错误的原因,因为Symbol\u observable缺失。据我所知
依赖项和版本
我用
角度7.0.2
rxjs 6.3.3
rxjs compat 6.3.3
redux observable 1.0.0他们使用rxjs 6-。
我的问题
为什么会发生这种情况?
我怎样才能修好它
我已经看过了,但我不确定如何使用它,或者这是否是一个好的解决方案。我也有同样的问题,配置几乎相同 经过一些研究后,我检查了所有导入,并更改了从rxjs/internal/operators的所有导入 至rxjs/运营商 这解决了Firefox、Chrome隐姓埋名等问题
干杯我有同样的问题,配置几乎相同 经过一些研究后,我检查了所有导入,并更改了从rxjs/internal/operators的所有导入 至rxjs/运营商 这解决了Firefox、Chrome隐姓埋名等问题 干杯我对rxjs/index也有同样的问题 更改自:
import { of, from, combineLatest, ... } from `rxjs/index`
致:
修好了
祝你好运:我对rxjs/index也有同样的问题
更改自:
import { of, from, combineLatest, ... } from `rxjs/index`
致:
修好了
祝你好运:我还可以补充一点,问题不在于RxJs,正如我在问题中所想的那样。错误的导入+一些错误的项目架构。@MartinJH能否请您提供更多关于您如何解决问题的信息,我有完全相同的问题,并且我修复了导入,但我仍然有相同的问题。对于不太充实的评论,我感到担忧;我的另一个问题是整个项目的结构。在我们的项目中,我们有标准npm包和angular库。我们通过他们所谓的史诗来制造副作用。我们在npm包中有epics的基本部分,在angular Library中有angular实现,继承自基本类型。这种跨库的继承在某种程度上破坏了可观察类型,导致了错误。解决方案是将epic相关的所有内容都移动到angular库中。@MartinJH与此同时,我也解决了这个问题:我正在使用我创建的另一个npm包,它公开了redux observable,但它有一个不同的rxjs版本,所以基本上我在我的项目中有两个不同的rxjs源,我认为这是造成错误的原因。解决方案是只保留一个RXJ,并将redux移动到我的主项目,而不是从npmpackage@ziz194太好了!调试此类错误可能非常困难。希望你的评论也能帮助一些人:我还可以补充一点,问题不在于RxJs,正如我在问题中所想的那样。错误的导入+一些错误的项目架构。@MartinJH能否请您提供更多关于您如何解决问题的信息,我有完全相同的问题,并且我修复了导入,但我仍然有相同的问题。对于不太充实的评论,我感到担忧;我的另一个问题是整个项目的结构。在我们的项目中,我们有标准npm包和angular库。我们通过他们所谓的史诗来制造副作用。我们在npm包中有epics的基本部分,在angular Library中有angular实现,继承自基本类型。这种跨库的继承在某种程度上破坏了可观察类型,导致了错误。解决方案是将epic相关的所有内容都移动到angular库中。@MartinJH与此同时,我也解决了这个问题:我正在使用我创建的另一个npm包,它公开了redux observable,但它有一个不同的rxjs版本,所以基本上我在我的项目中有两个不同的rxjs源,我认为这是造成错误的原因。解决办法是只保留一个rx
js并将redux obserfible移动到我的主项目,而不是从npmpackage@ziz194太好了!调试此类错误可能非常困难。希望你的评论也能对某人有所帮助:这可能有帮助:这可能有帮助:
import { of, from, combineLatest, ... } from `rxjs/index`
import { of, from, combineLatest, ... } from `rxjs`