我想将我的应用程序状态写为
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]
} }
这可能吗?
答案 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);