我有一个角度服务,我想在其中公开一个充当逻辑“或”的可观察对象。假设我有多个可以给出on
和off
值的源序列。我需要在true
任何时候输出任何东西on
,然后回到false
所有值都是off
。
例子:
const replaceInput = input => input === 'on' ? 'off' : 'on';
const getSource = (name) => Observable.interval(1000)
.scan(
input => Math.random() > 0.5 ? replaceInput(input) : input,
'off' // initial value
)
.do(val => console.log(`${name}: ${val});
const first$ = getSource('first');
const second$ = getSource('second');
const result$ = ???;
现在,我试过了result$ = Observable.merge(first$, second$)
,但总是给出on
。我也尝试过result$ = combineLatest(first$, second$)
,所以这有点好,但是我的输入不同步,所以它并不总是完美的。我的意思是, first$ 可能会发出多个值,而 second 可能永远不会触发,反之亦然。我还可以做些什么?
我想到了一些 mergeMap 或类似的东西,然后将状态保持在外部上下文中,这样我就可以在任何事件上运行更新。但是后来我遇到了一个问题,“关闭”事件可能意味着“关闭”,但前提是其他序列也“关闭”,所以它很快就会变得棘手。