在动手实现之前,我们先来简单介绍下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了。
在下篇中,我们来简单的对其进行实现。
本文介绍了Rxjs的combineLatest操作符,它用于合并多个Observable的最新值。当所有Observable至少发射一次数据后,combineLatest才开始发射数据,之后任意一个Observable发射新值都会触发新的数据发射。如果在收集所有数据前有Observable完成,combineLatest会立即完成而不发射数据。通过示例解释了其工作原理和行为。
&spm=1001.2101.3001.5002&articleId=82709870&d=1&t=3&u=b8fb5560be7a4f678e47ca993536dd80)
1万+

被折叠的 条评论
为什么被折叠?



