Rxjs实践系列之zip

1,024 阅读1分钟

概述

  • 这是一个不太常用的操作符,很大一部分原因是有forkJoin操作符
  • 用于数据的有系合并,功能类似Promice.all
  • 可以多次返回数据,当每个流数据每次都返回一次数据就会产生一次订阅数据

事例

import { interval, zip } from 'rxjs'; 
import { delay, take } from 'rxjs/operators';


const source1 = interval(1000).pipe(
  take(2)
);
const source2 = interval(1000).pipe(
  delay(2000),take(10)
);
const source3 = interval(1000).pipe(
  delay(3000), take(10)
);

zip(source1, source2, source3).subscribe(res => console.log(res)) // 3秒后输出 [0, 0, 0],4秒后输出 [1, 1, 1]

当每个流都拿到第一次数据时,zip返回第一次数据; 当每个流都拿到了第二次数据时,zip返回第二次数据; 因为不能每个都拿到第三次数据(source1拿不到),所以zip只2次数据返回

这里核心点,返回过数据次数点相同的情况下,就会返回一次数据,通俗点说zip返回数据次数由那个返回数据次数最少的流决定

代码在线验证地址

文中如有错误,欢迎在评论区指正,如果这篇文章帮助到了你,欢迎点赞和关注

本文使用 mdnice 排版