Mam jeden Obserwowalny, obs1, który reprezentuje strumień liczb w czasie. Muszę zgromadzić sumę takich liczb i wyemitować je stopniowo (tj. Długą drogę, by powiedzieć, że muszę użyć scan
operator).
Potem jest drugi obserwowalny, obs2, reprezentuje to pewnego rodzaju „czas resetowania”. Innymi słowy, kiedy obs2 emituje, muszę zresetować ustawiony przeze mnie akumulator obs1 i zacznij sumowanie od 0.
Myślę, że udało mi się osiągnąć pożądane zachowanie za pomocą następującego kodu, ale nie jestem pewien, czy jest to właściwy sposób (to rodzaj zapachów dla mnie)
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);
Wszelkie sugestie, jak to poprawić?
Odpowiedzi:
0 dla odpowiedzi № 1Prawdopodobnie jest to coś, czego szukałem
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);