码迷,mamicode.com
首页 > Web开发 > 详细

[RxJS] Handling a Complete Stream with Reduce

时间:2016-03-11 22:09:36      阅读:312      评论:0      收藏:0      [点我收藏+]

标签:

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

标签:

原文地址:http://www.cnblogs.com/Answer1215/p/5267214.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!