在“reduce / scan”中匹配累加器函数中的observable类型?

时间:2015-08-24 16:00:36

标签: javascript rxjs

我想将我的应用程序状态写为 scan(或更确切地说是const inputStream$ = Rx.Observable.merge(all$, observables$, Im$, interested$, in$); const outputStream$ = inputStream$.scan(accumulator, initialState); )对所有输入可观察对象起作用。

inputStream$

由于accumulator可以包含任何值,function accumulator (acc, x) { switch (x) { case "all$ has fired": return newState0; case "observables$ has fired": return newState1; case "Im$ has fired": return newState2; case "interested$ has fired": return newState3; case "in$ has fired": return newState4; 函数 必须做很多类型检查,这看起来相当脆弱。

我正在寻找的是:

enum :language, [:'zh-TW', :jp]

} }

这可能吗?

1 个答案:

答案 0 :(得分:1)

不确定。只需将map运算符应用于每个输入流,即可在合并之前为该值添加一个鉴别器:

Rx.Observable.prototype.tag = function (tag) {
    return this.map(value => ({ tag, value }));
};

const inputStream$ = Rx.Observable.merge(a.tag("a"), b.tag("b"), ...);
const outputStream$ = inputStream$.scan(v => {
        const value = v.value;
        switch (v.tag) {
            case "a": return newState0;
            case "b": return newState1;
            ...
        }
    }, initialState);