了解rxjs6中的合并(特别是redux-observable)

时间:2018-08-20 19:14:29

标签: merge redux-observable rxjs6

上下文:我正在尝试将Testredux-observable一起使用,以在获取资源后触发多个操作。

问题:获取资源没问题后,我可以触发一个操作;但是我试图触发多个动作的尝试让我很沮丧。具体来说,以下所示的尝试使用rxjs rxjs v6来触发多个操作似乎很标准且接近已记录的示例(see e.g. here),以至于我无法理解哪里出了问题。这是我的代码的细分,其中注释中指示了打字稿类型;为了简化问题,我简化了事情:

merge

当我尝试import { from } from "rxjs"; import { merge, mergeMap, map } from "rxjs/operators"; import { AnyAction } from "redux"; ... //Setup related to rxjs-observable epics function myEpic( action$: Observable<AnyAction>, state$: any, {fetchPromisedStrings}: any ) { return action$.pipe( ofType('MY_ACTION'), mergeMap( action => { const demoAction1: AnyAction = {type:'FOO1', payload:'BAR1'}; const demoAction2: AnyAction = {type:'FOO2', payload:'BAR2'}; const w = from(fetchPromisedStrings()) //const w: Observable<string[]> const x = w.pipe( map(() => demoAction1)); //const x: Observable<AnyAction> const y = w.pipe( map(() => demoAction2)); //const y: Observable<AnyAction> //My attempt to merge observables: const z = merge(x,y); // const z: OperatorFunction<{}, {} | AnyAction> // return x; // Works :) // return y; // Works :) return z; // Doesn't work :( } ) ); } 时,此代码给我以下错误:

return z

那么这是什么问题?我希望上面的代码中的TypeError: You provided 'function (source) { return source.lift.call(_observable_merge__WEBPACK_IMPORTED_MODULE_0__["merge"].apply(void 0, [source].concat(observables))); }' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable 采用两种merge类型并返回一个Observable<AnyAction>类型(或与Observable<AnyAction>兼容的一些更通用的类型,史诗需要才能正常运行)。取而代之的是,我得到了一种称为Observable<AnyAction>的不透明类型,显然与OperatorFunction<{}, {} | AnyAction>不兼容。有人可以在这里弄乱我的想法吗? Observable<AnyAction>不是我应该在此处使用的运算符,还是我的整个merge模式对于(看似)简单的目标(在获取承诺的资源后触发多个操作)是错误的?

1 个答案:

答案 0 :(得分:5)

您的代码还可以,但是您已经导入了merge运算符,而不是merge可观察的工厂

只需:

import { merge } from 'rxjs';