zoukankan      html  css  js  c++  java
  • [RxJS] Adding Conditional Logic with Filter

    Often you only want values to proceed through your stream if they meet certain criteria, just as if you were using an if statement in plain JavaScript. This lesson shows you how to use filter on your stream to only push the values that you need through your stream.

    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})
    )
        .filter((data)=> data.count === parseInt(data.text))
        .subscribe(
            (x)=> console.log(x),
            err=> console.log(err),
            ()=> console.log('complete')
        );
  • 相关阅读:
    js入门
    小程序事件处理
    Vue组件传递数据
    Vue+webpack
    vue总结
    Vue指令
    最优化练习题
    最优化学习笔记
    概率与统计分析练习题
    概率与统计分析学习笔记
  • 原文地址:https://www.cnblogs.com/Answer1215/p/5265924.html
Copyright © 2011-2022 走看看