накапливаются значения, например, при сканировании, но с возможностью сброса аккумулятора с течением времени - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть одна наблюдаемая, obs1 , которая представляет поток чисел с течением времени. Мне нужно накапливать сумму таких чисел и постепенно генерировать ее (т. Е. Долго говорить, что мне нужно использовать оператор scan).

Затем существует вторая наблюдаемая, 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);

Есть предложения по улучшению?

1 Ответ

0 голосов
/ 25 апреля 2018

Вероятно, что-то вроде этого - то, что я искал

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...