[RxJS] Handling a Complete Stream with Reduce

Posted Answer1215

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[RxJS] Handling a Complete Stream with Reduce相关的知识,希望对你有一定的参考价值。

When a stream has completed, you often need to evaluate everything that has happened while the stream was running. This lesson covers how to use reduce to collect values and total up a “score” of this simple game.

 

const Observable = Rx.Observable;

const startButton = document.querySelector(#start);
const halfButton = document.querySelector(#half);
const quarterButton = document.querySelector(#quarter);

const stopButton = document.querySelector(#stop);
const resetButton = document.querySelector(#reset);

const input = document.querySelector(#input);

const start$ = Observable.fromEvent(startButton, click);
const half$ = Observable.fromEvent(halfButton, click);
const quarter$ = Observable.fromEvent(quarterButton, click);

const stop$ = Observable.fromEvent(stopButton, click);
const reset$ = Observable.fromEvent(resetButton, click);

const input$ = Observable.fromEvent(input, input)
    .map(event => event.target.value);


const data = {count:0};
const inc = (acc)=> ({count: acc.count + 1});
const reset = (acc)=> data;

const starters$ = Observable.merge(
    start$.mapTo(1000),
    half$.mapTo(500),
    quarter$.mapTo(250)
);

const intervalActions = (time)=> Observable.merge(
    Observable.interval(time)
        .takeUntil(stop$).mapTo(inc),
    reset$.mapTo(reset)
);

const timer$ = starters$
    .switchMap(intervalActions)
    .startWith(data)
    .scan((acc, curr)=> curr(acc))


Observable.combineLatest(
    timer$,
    input$,
    (timer, input)=> ({count: timer.count, text: input})
)
    .takeWhile((data)=> data.count <= 3)
    .filter((data)=> data.count === parseInt(data.text))
    .reduce((acc, curr)=> acc + 1, 0) //count how many times it go thought filter
    .subscribe(
        (x)=> console.log(x),
        err=> console.log(err),
        ()=> console.log(complete)
    );

 

以上是关于[RxJS] Handling a Complete Stream with Reduce的主要内容,如果未能解决你的问题,请参考以下文章

[RxJS] Handling a Complete Stream with Reduce

[RxJS 6] The Retry RxJs Error Handling Strategy

[RxJS] Error handling operator: catch

Jackson - Date Handling

Handling Captcha | Webdriver

web-api-global-error-handling