zoukankan      html  css  js  c++  java
  • [RxJS] Refactoring CombineLatest to WithLatestFrom

    This lesson shows why it’s preferable to using withLatestFrom instead of combineLatest in certain scenarios.

    Timer will continue until you enter the number in the input field:

    timer$
        .do((x)=> console.log(x))
        .combineLatest(
            input$.do((x)=> console.log(x)),
            (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)
        .subscribe(
            (x)=> console.log(x),
            err=> console.log(err),
            ()=> console.log('complete')
        );

    In this case, withLatestFrom() works the same way:

    timer$
        .do((x)=> console.log(x))
        .withLatestFrom(
            input$.do((x)=> console.log(x)),
            (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)
        .subscribe(
            (x)=> console.log(x),
            err=> console.log(err),
            ()=> console.log('complete')
        );

    But let's say we only want the timer log out 3 times then it should hit the complete block, logout "complete":

    timer$
        .do((x)=> console.log(x))
        .takeWhile((data)=> data.count <= 3)
        .withLatestFrom(
            input$.do((x)=> console.log(x)),
            (timer, input)=> ({count: timer.count, text: input})
        )
        .filter((data)=> data.count === parseInt(data.text))
        .reduce((acc, curr)=> acc + 1, 0)
        .subscribe(
            (x)=> console.log(x),
            err=> console.log(err),
            ()=> console.log('complete')
        );

    then it only works with withLatestFrom() NOT combimeLatest().

    The reason for that is combimeLatest require both timer$ and input$. But withLatestFrom() only need $timer.

  • 相关阅读:
    win7下利用VM8安装CentOS6.3配置静态IP上网
    laravel的门面模式
    Redis主从在线互相切换
    phpcmsv9的评论分表策略
    phpcms v9的url优化
    php rsa加密解密实例
    centos 支持中文,安装输入法
    yii2 页面上编写js代码,并注册到页面底部
    yii2 GridView 简要解析
    yii2 migration使用
  • 原文地址:https://www.cnblogs.com/Answer1215/p/5269643.html
Copyright © 2011-2022 走看看