combineLatest
是组合操作符,用来组合多个Observables
来创建一个Observable
,该Observable
的值根据每个输入Observable
的最新值进行计算。
来看看语法表达式:
1 | public static combineLatest(observable1: ObservableInput, observable2: ObservableInput, project: function, scheduler: Scheduler): Observable |
参数:
observable1
用来和其他observable
结合的输入observable
。observable2
用来和其他observable
结合的输入observable
。project
可选,投射成输出Observable
上的一个新值scheduler
可选,默认值为null,用来订阅每个输入Observable
的调度器。
combineLatest
结合所有输入的Observable
参数的值,顺序订阅每个Observable
。每当任一输入的Observable
发出新的值时,收集每个输入Observable
的最新值组成一个数组。所以,当给操作符输入n个Observable
时,返回的Observable
总是会发出一个长度为n的数组,对应输入的Observable
的顺序(第一个Observable
的值为数组第一个)。
为了保证输出数组的长度相同,在返回的Observable
发出值之前,combineLatest
实际上会等待所有的输入Observable
至少发出一次。
这意味着,如果某个输入的Observable
在其余的Observable
发出值之前发出了多个值,那么它发出的值只保留最新的。
另一方面,如果某个输入的Observable
没有发出值就完成了,返回的Observalbe
也不会发出值并立马完成。因为不可能从已完成的Observalbe
中收集到值。
同样,如果某个输入的Observable
不发出值也不完成,那么combineLatest
也永远不会发出值也不结束。所以,它会等待所有的流去发出值。
如果某个输入的Observable
发出值后完成了,当其他的输入Observable
发出值的时候,combineLatest
返回Observable
仍然会发出值。对于完成的输入Observable
,它的值一直是最后发出的值。
如果某个输入Observable
发生了错误,combineLatest
也会立马触发错误状态,所有的其他输入Observable
都会被解除订阅。
combineLatest
接受一个可选的参数投射函数,它接收返回的Observable
发出的值。投射函数可以返回任何数据,这些数据代替默认的数组被返回Observable
发出。需要注意的是,投射函数并不接受值的数组,而是值的本身。这意味着默认的投射函数就是一个接受所有参数并把他们放到一个数组里面的函数。
例如:
1 | import {of, combineLatest} from "rxjs"; |
combineLatest的基本用法。
LINK: