每天实现一个Rxjs中的Operator之combineLatest操作(一)

RXJS 专栏收录该内容
10 篇文章 0 订阅

在动手实现之前,我们先来简单介绍下combineLatest的作用。combineLatest可以将多个Observable进行合并,并将它们最新的值作为输出。它存在以下几个特点:

  • combineLatest会等到所有的Observable都emit一次数据之后才开始emit数据
  • 在收集完一次数据之后,任何一个Observable emit了数据,则会emit数据,并不会再次等待所有Observable再次emit数据。
  • 如果在所有Observable都emit数据之前,某个Observable执行了complete,则combineLatest不会emit任何数据,直接complete
  • combineLatest如果有n个Observbale,则emit的值是长度为n的数组
    比如:
const ob1 = Rx.Observable.interval(1000).map(d => `ob1:${d}`).take(3);
const ob2 = Rx.Observable.interval(1000).delay(2000).map(d => `ob2:${d}`).take(2);

输出为:

["ob1:1", "ob2:0"]
["ob1:2", "ob2:0"]
["ob1:2", "ob2:1"]
complete

由于ob2会延长2秒执行,在ob2发射第一个数据0的时候,ob1开始发射1,所以第一个输出的是[“ob1:1”, “ob2:0”]。ob1发射完2后就complete了,但是之后ob2还在继续发射数据,所以最后输出[“ob1:2”, “ob2:1”]并complete。

const ob1 = Rx.Observable.interval(1000).map(d => `ob1:${d}`).take(3);
const ob2 = Rx.Observable.empty();

Rx.Observable.combineLatest(ob1, ob2).subscribe({
  next: (data) => console.log(data),
  complete: () => console.log('complete')
});

输出为:complete。
因为ob2不发射任何数据,直接complete了。这导致combineLatest在收集到所有observable的数据前有complete的observable,所以combineLatest就直接complete了。

在下篇中,我们来简单的对其进行实现。

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值