/ / gromadzenie wartości takich jak skanowanie, ale z możliwością resetowania akumulatora w czasie - rxjs

gromadzenie wartości takich jak przy skanowaniu, ale z możliwością resetowania akumulatora w czasie - rxjs

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 № 1

Prawdopodobnie 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);