تراكم القيم مثل مع المسح ولكن مع إمكانية إعادة تراكم بمرور الوقت

لدي ملاحظة واحدة ، 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);

أي اقتراح على كيفية تحسينه؟

0

1 إجابة

ربما شيء من هذا القبيل هو ما كنت أبحث عنه

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);
0
وأضاف