我有一个Observable, obs1 ,它代表一段时间内的数字流。我需要累积这些数字的总和并逐步发出它(也就是说我需要使用scan
运算符)。
然后有第二个Observable, obs2 ,代表某种"重置时间"。换句话说,当 obs2 发出时,我必须重置我在 obs1 上设置的累加器,并从0开始求和。
我认为我已经能够通过以下代码达到我想要的行为,但我不确定这是否是正确的方法(对我来说有点气味)
const obs1 = Observable.interval(100).mapTo(1).take(100);
const obs2 = Observable.interval(700).take(10);
obs1.pipe(
windowWhen(() => obs2),
mergeMap(d => d.pipe(scan((acc, one) => acc + one, 0)))
)
.subscribe(console.log);
关于如何改进它的任何建议?
答案 0 :(得分:2)
可能这样的东西就是我在寻找的东西
const obs1 = Observable.interval(100).mapTo(1).take(100);
const obs2 = Observable.interval(700).take(10);
function scanReset(seed) {
return obs1.pipe(
scan((acc, one) => acc + one, seed)
)
}
obs2.pipe(
switchMap(() => scanReset(0))
)
.subscribe(console.log);