Mar*_*nJH 1 rxjs redux redux-observable angular
在我的Anguar(7)项目中,我使用redux-observable来做我的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)
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,则会引发错误的终极版,可观察到的createEpicMiddleware,而这是由RxJs检查造成subscribeTo.js。
在读取了此GitHub线程的响应后,我然后尝试深入研究subscribeTo.js。最后,用户Agraphie指出在subscriptionTo.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('---------------------------')
});
}
...
Run Code Online (Sandbox Code Playgroud)
结果可以在下面的屏幕截图中看到(左侧是标准Chrome,右侧是Chrome Incognito)
注意,可观察的IS是可观察的。它甚至通过了RxJs自己的isObservable测试。那么,为什么它没有通过下面的检查呢?
如果您在上方靠近看,您会发现传入的可观察对象的原型看起来与左侧和右侧不同。更准确地说,左侧具有function属性Symbol(observable): f (),而右侧则没有。相反,右侧有@@observable: f ()。
简而言之,result && typeof result[Symbol_observable] === 'function'由于缺少Symbol_observable ,因此检查是导致错误的原因。据我所知。
我用
为什么会这样?我该如何解决?
我已经看过symbol-observable,但是我不确定如何使用它,或者这是否是一个好的解决方案。
小智 7
我有相同的问题,几乎具有相同的配置。
经过研究后,我检查了所有进口,并从(rxjs/internal/operators)更改了所有进口
import { catchError, flatMap, map, skipWhile } from 'rxjs/internal/operators';
Run Code Online (Sandbox Code Playgroud)
至(rxjs/operators)
import { catchError, flatMap, map, skipWhile } from 'rxjs/operators';
Run Code Online (Sandbox Code Playgroud)
这解决了Firefox,Chrome Incognito等问题。
干杯
| 归档时间: |
|
| 查看次数: |
351 次 |
| 最近记录: |