zoukankan      html  css  js  c++  java
  • [RxJS] Replace zip with combineLatest when combining sources of data

    This lesson will highlight the true purpose of the zip operator, and how uncommon its use cases are. In its place, we will learn how to use the combineLatest operator.

    const length$ = Rx.Observable.of(5, 4);
    const width$ = Rx.Observable.of(7,1);
    const height$ = Rx.Observable.of(2.8, 2.5);
    
    const volume$ = Rx.Observable
      .zip(length$, width$, height$,
        (length, width, height) => length * width * height
      );
    
    volume$.subscribe(function (volume) {
      console.log(volume); 
    });

    zip requiers each observable has synchronized emissions.  It means:

    const length$ = Rx.Observable.of(5);
    const width$ = Rx.Observable.of(7);
    const height$ = Rx.Observable.of(2.8, 2.5);

    2.5 won't be calculated only when lenth$ and width$ provide second value.

    In this case we can use combineLatest instead of zip:

    const length$ = Rx.Observable.of(5);
    const width$ = Rx.Observable.of(7);
    const height$ = Rx.Observable.of(2.8, 2.5);
    
    const volume$ = Rx.Observable
      .combineLatest(length$, width$, height$,
        (length, width, height) => length * width * height
      );
    
    volume$.subscribe(function (volume) {
      console.log(volume); 
    });

    One useful tip for using zip:

    zip can spread sync value over time, when combine with interval

    const source$ = of('hello')
    const interval$ = interval(100).take(5)
    
    source$.zip(interval$, (s, n) => s)
        .subscribe()
    
    /* 
    source$: (hello)|
    interval$          ----0----1----2----3----4
        
           zip
    
                       ----h----e----l----l----o
    */    

    The same effect can also be done with concatMap + delay

    const source$ = of('hello')
    source$.concatMap(x => of(x).delay(100))
  • 相关阅读:
    项目管理
    智能硬件如何确定需求:场景约束
    产品设计
    产品设计之前,如何分析业务需求和用户痛点?
    微信小程序挑一挑辅助
    C#实现冲顶大会辅助工具(截图+图像识别+搜索)
    读取配置文件--AppConfig
    文件各种上传,离不开的表单
    使用C#委托来实现异步编程
    Table 组件构建过程中遇到的问题与解决思路
  • 原文地址:https://www.cnblogs.com/Answer1215/p/6918001.html
Copyright © 2011-2022 走看看