RxJS combineLatest
组合多个 Observable 创建一个 Observable,其值是根据其每个输入 Observable 的最新值计算得出的。
combineLatest<O extends ObservableInput<any>, R>(...observables: (SchedulerLike | O | ((...values: ObservedValueOf<O>[]) => R))[]): Observable<R>
参量
可观察的 | 类型:。 |
---|---|
(SchedulerLike | O | ((...values: ObservedValueOf[]) => R))[] |
returns
Observable<R>
:来自每个输入 Observable 的最新值的投影值的 Observable,或来自每个输入 Observable 的最新值的数组。
描述
每当任何 Observable 输入发出一个值时,它都会使用来自所有输入的最新值来计算公式,然后发出该公式的输出。
combineLatest
合并所有作为参数传递的 Observable 的值。这是通过按顺序订阅每个 Observable 来完成的,并且每当发出任何 Observable 时,就从每个 Observable 中收集最新值的数组。因此,如果将n
Observables 传递给运算符,则返回的 Observable 将始终发出 n
值数组,其顺序与传递的 Observables 的顺序相对应(从第一个 Observable 的值排在第一位,依此类推)。
静态版本 combineLatest
接受一个 Observable 数组,或者每个 Observable 都可以直接作为参数放置。请注意,如果您事先不知道将合并多少个 Observable,则 Observable 数组是一个不错的选择。传递空数组将导致 Observable 立即完成。
为确保输出数组的长度始终相同,combineLatest
实际上将等待所有输入 Observable 至少发出一次,然后再开始发出结果。这意味着,如果某个 Observable 在其他 Observable 开始发出值之前发出值,则所有这些值(最后一个值)都将丢失。另一方面,如果某个 Observable 不发出值而是完成一个值,则结果 Observable 将在同一时刻完成而不会发出任何东西,因为现在将不可能从完成的 Observable 中包含值到结果数组中。同样,如果某些输入 Observable 不会发出任何值并且永远不会完成,那么 combineLatest
也将永远不会发出并且永远不会完成,因为同样,它将等待所有流发出某些值。
如果至少有一个 Observable 传递给了 combineLatest
所有传递的 Observable ,并且所有事物都发出了某种东西,那么当所有组合流完成时,结果 Observable 将完成。因此,即使某些Observable完成,combineLatest
当其他 Observable 执行时,result 仍将发出值。在完成 Observable 的情况下,其从现在开始的值将始终是最后发出的值。另一方面,如果有任何可观察的错误,combineLatest
也会立即发生错误,所有其他可观察的对象都将被取消订阅。
combineLatest
接受作为可选参数 project
函数,该函数接受通常由结果 Observable 发出的所有值作为参数。 project
可以返回任何类型的值,然后该值将由 Observable 而不是默认数组发出。注意,project
该值数组不是参数,而是值本身。这意味着 project
可以将 default 想象为一个接受所有参数并将其放入数组的函数。
例子
结合两个计时器 Observables
import { combineLatest, timer } from 'rxjs';
const firstTimer = timer(0, 1000); // emit 0, 1, 2... after every second, starting from now
const secondTimer = timer(500, 1000); // emit 0, 1, 2... after every second, starting 0,5s from now
const combinedTimers = combineLatest(firstTimer, secondTimer);
combinedTimers.subscribe(value => console.log(value));
// Logs
// [0, 0] after 0.5s
// [1, 0] after 1s
// [1, 1] after 1.5s
// [2, 1] after 2s
结合一系列可观察物
import { combineLatest, of } from 'rxjs';
import { delay, starWith } from 'rxjs/operators';
const observables = [1, 5, 10].map(
n => of(n).pipe(
delay(n * 1000), // emit 0 and then emit n after n seconds
startWith(0),
)
);
const combined = combineLatest(observables);
combined.subscribe(value => console.log(value));
// Logs
// [0, 0, 0] immediately
// [1, 0, 0] after 1s
// [1, 5, 0] after 5s
// [1, 5, 10] after 10s
使用项目功能动态计算身体质量指数
import { combineLatest, of } from 'rxjs';
import { map } from 'rxjs/operators';
const weight = of(70, 72, 76, 79, 75);
const height = of(1.76, 1.77, 1.78);
const bmi = combineLatest(weight, height).pipe(
map(([w, h]) => w / (h * h)),
);
bmi.subscribe(x => console.log('BMI is ' + x));
// With output to console:
// BMI is 24.212293388429753
// BMI is 23.93948099205209
// BMI is 23.671253629592222
超载
combineLatest(sources: [O1], resultSelector: (v1: ObservedValueOf<O1>) => R, scheduler?: SchedulerLike): Observable<R>
参量: | 类型: |
---|---|
资料来源 | 类型:[O1] |
resultSelector | 类型:(v1: ObservedValueOf) => R |
调度器 | 可选的。默认值为undefined 。类型:SchedulerLike |
returns Observable<R>
combineLatest(sources: [O1, O2], resultSelector: (v1: ObservedValueOf<O1>, v2: ObservedValueOf<O2>) => R, scheduler?: SchedulerLike): Observable<R>
参量: | 类型: |
---|---|
资料来源 | 类型:[O1, O2] |
resultSelector | 类型:。`(v1: ObservedValueOf, v2: ObservedValueOf) => R |
调度器|可选的。默认值为 undefined。类型: SchedulerLike` |
returnsObservable<R>
combineLatest(sources: [O1, O2, O3], resultSelector: (v1: ObservedValueOf<O1>, v2: ObservedValueOf<O2>, v3: ObservedValueOf<O3>) => R, scheduler?: SchedulerLike): Observable<R>
参量: | 类型: |
---|---|
资料来源 | 类型:[O1, O2, O3] |
resultSelector | 类型:(v1: ObservedValueOf, v2: ObservedValueOf, v3: ObservedValueOf) => R |
调度器 | 可选的。默认值为undefined 。类型:SchedulerLike |
returnsObservable<R>
combineLatest(sources: [O1, O2, O3, O4], resultSelector: (v1: ObservedValueOf<O1>, v2: ObservedValueOf<O2>, v3: ObservedValueOf<O3>, v4: ObservedValueOf<O4>) => R, scheduler?: SchedulerLike): Observable<R>
参量: | 类型: |
---|---|
资料来源 | 类型:[O1, O2, O3, O4] |
resultSelector | 类型:(v1: ObservedValueOf, v2: ObservedValueOf, v3: ObservedValueOf, v4: ObservedValueOf) => R |
调度器 | 可选的。默认值为undefined 。类型:SchedulerLike |
returnsObservable<R>
combineLatest(sources: [O1, O2, O3, O4, O5], resultSelector: (v1: ObservedValueOf<O1>, v2: ObservedValueOf<O2>, v3: ObservedValueOf<O3>, v4: ObservedValueOf<O4>, v5: ObservedValueOf<O5>) => R, scheduler?: SchedulerLike): Observable<R>
参量: | 类型: |
---|---|
资料来源 | 类型:[O1, O2, O3, O4, O5] |
resultSelector | 类型:(v1: ObservedValueOf, v2: ObservedValueOf, v3: ObservedValueOf, v4: ObservedValueOf, v5: ObservedValueOf) => R |
调度器 | 可选的。默认值为undefined 。类型:SchedulerLike |
returnsObservable<R>
combineLatest(sources: [O1, O2, O3, O4, O5, O6], resultSelector: (v1: ObservedValueOf<O1>, v2: ObservedValueOf<O2>, v3: ObservedValueOf<O3>, v4: ObservedValueOf<O4>, v5: ObservedValueOf<O5>, v6: ObservedValueOf<O6>) => R, scheduler?: SchedulerLike): Observable<R>
参量: | 类型: |
---|---|
资料来源 | 类型:[O1, O2, O3, O4, O5, O6] |
resultSelector | 类型:(v1: ObservedValueOf, v2: ObservedValueOf, v3: ObservedValueOf, v4: ObservedValueOf, v5: ObservedValueOf, v6: ObservedValueOf) => R |
调度器 | 可选的。默认值为undefined 。类型:SchedulerLike |
returnsObservable<R>
combineLatest(sources: O[], resultSelector: (...args: ObservedValueOf<O>[]) => R, scheduler?: SchedulerLike): Observable<R>
参量: | 类型: |
---|---|
资料来源 | 类型:O[] |
resultSelector | 类型:(...args: ObservedValueOf[]) => R |
调度器 | 可选的。默认值为undefined 。类型:SchedulerLike |
returnsObservable<R>
combineLatest(v1: O1, resultSelector: (v1: ObservedValueOf<O1>) => R, scheduler?: SchedulerLike): Observable<R>
参量: | 类型: |
---|---|
v1 | 类型:O1 |
resultSelector | 类型:(v1: ObservedValueOf) => R |
调度器 | 可选的。默认值为undefined 。类型:SchedulerLike |
returnsObservable<R>
combineLatest(v1: O1, v2: O2, resultSelector: (v1: ObservedValueOf<O1>, v2: ObservedValueOf<O2>) => R, scheduler?: SchedulerLike): Observable<R>
参量: | 类型: |
---|---|
v1 | 类型:O1 |
v2 | 类型:O2 |
resultSelector | 类型:(v1: ObservedValueOf, v2: ObservedValueOf) => R |
调度器 | 可选的。默认值为undefined 。类型:SchedulerLike |
returnsObservable<R>
combineLatest(v1: O1, v2: O2, v3: O3, resultSelector: (v1: ObservedValueOf<O1>, v2: ObservedValueOf<O2>, v3: ObservedValueOf<O3>) => R, scheduler?: SchedulerLike): Observable<R>
参量: | 类型: |
---|---|
v1 | 类型:O1 |
v2 | 类型:O2 |
v3 | 类型:O3 |
resultSelector | 类型:(v1: ObservedValueOf, v2: ObservedValueOf, v3: ObservedValueOf) => R |
调度器 | 可选的。默认值为undefined 。类型:SchedulerLike |
returnsObservable<R>
combineLatest(v1: O1, v2: O2, v3: O3, v4: O4, resultSelector: (v1: ObservedValueOf<O1>, v2: ObservedValueOf<O2>, v3: ObservedValueOf<O3>, v4: ObservedValueOf<O4>) => R, scheduler?: SchedulerLike): Observable<R>
参量v1类型:O1
。v2类型:O2
。v3类型:O3
。v4类型:O4
。resultSelector类型:。(v1: ObservedValueOf, v2: ObservedValueOf, v3: ObservedValueOf, v4: ObservedValueOf) => R
调度器可选的。默认值为undefined
。类型:SchedulerLike
。
returnsObservable<R>
combineLatest(v1: O1, v2: O2, v3: O3, v4: O4, v5: O5, resultSelector: (v1: ObservedValueOf<O1>, v2: ObservedValueOf<O2>, v3: ObservedValueOf<O3>, v4: ObservedValueOf<O4>, v5: ObservedValueOf<O5>) => R, scheduler?: SchedulerLike): Observable<R>
参量: | 类型: |
---|---|
v1 | 类型:O1 |
v2 | 类型:O2 |
v3 | 类型:O3 |
v4 | 类型:O4 |
v5 | 类型:O5 |
resultSelector | 类型:(v1: ObservedValueOf, v2: ObservedValueOf, v3: ObservedValueOf, v4: ObservedValueOf, v5: ObservedValueOf) => R |
调度器 | 可选的。默认值为undefined 。类型:SchedulerLike |
returnsObservable<R>
combineLatest(v1: O1, v2: O2, v3: O3, v4: O4, v5: O5, v6: O6, resultSelector: (v1: ObservedValueOf<O1>, v2: ObservedValueOf<O2>, v3: ObservedValueOf<O3>, v4: ObservedValueOf<O4>, v5: ObservedValueOf<O5>, v6: ObservedValueOf<O6>) => R, scheduler?: SchedulerLike): Observable<R>
参量: | 类型: |
---|---|
v1 | 类型:O1 |
v2 | 类型:O2 |
v3 | 类型:O3 |
v4 | 类型:O4 |
v5 | 类型:O5 |
v6 | 类型:O6 |
resultSelector | 类型:(v1: ObservedValueOf, v2: ObservedValueOf, v3: ObservedValueOf, v4: ObservedValueOf, v5: ObservedValueOf, v6: ObservedValueOf) => R |
调度器 | 可选的。默认值为undefined 。类型:SchedulerLike |
returnsObservable<R>
combineLatest(sources: [O1], scheduler: SchedulerLike): Observable<[ObservedValueOf<O1>]>
参量: | 类型: |
---|---|
资料 | 来源类型:[O1] |
调度器 | 类型:SchedulerLike |
returnsObservable<[ObservedValueOf<O1>]>
combineLatest(sources: [O1, O2], scheduler: SchedulerLike): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>]>
参量: | 类型: |
---|---|
资料来源 | 类型:[O1, O2] |
调度器 | 类型:SchedulerLike |
returnsObservable<[ObservedValueOf<O1>, ObservedValueOf<O2>]>
combineLatest(sources: [O1, O2, O3], scheduler: SchedulerLike): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>]>
参量: | 类型: |
---|---|
资料来源 | 类型:[O1, O2, O3] |
调度器 | 类型:SchedulerLike |
returns Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>]>
combineLatest(sources: [O1, O2, O3, O4], scheduler: SchedulerLike): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>]>
参量: | 类型: |
---|---|
资料 | 来源类型:[O1, O2, O3, O4] |
调度器 | 类型:SchedulerLike |
returnsObservable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>]>
combineLatest(sources: [O1, O2, O3, O4, O5], scheduler: SchedulerLike): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>, ObservedValueOf<O5>]>
参量: | 类型: |
---|---|
资料来源 | 类型:[O1, O2, O3, O4, O5] |
调度器 | 类型:SchedulerLike |
returnsObservable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>, ObservedValueOf<O5>]>
combineLatest(sources: [O1, O2, O3, O4, O5, O6], scheduler: SchedulerLike): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>, ObservedValueOf<O5>, ObservedValueOf<O6>]>
参量: | 类型: |
---|---|
资料来源 | 类型:[O1, O2, O3, O4, O5, O6] |
调度器 | 类型:SchedulerLike |
returnsObservable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>, ObservedValueOf<O5>, ObservedValueOf<O6>]>
combineLatest(sources: O[], scheduler: SchedulerLike): Observable<ObservedValueOf<O>[]>
参量: | 类型: |
---|---|
资料来源 | 类型:O[] |
调度器 | 类型:SchedulerLike |
returnsObservable<ObservedValueOf<O>[]>
combineLatest(sources: [O1]): Observable<[ObservedValueOf<O1>]>
参量资料来源类型:[O1]
。returnsObservable<[ObservedValueOf<O1>]>
combineLatest(sources: [O1, O2]): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>]>
参量: | 类型: |
---|---|
资料来源 | 类型:[O1, O2] |
returnsObservable<[ObservedValueOf<O1>, ObservedValueOf<O2>]>
combineLatest(sources: [O1, O2, O3]): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>]>
参量: | 类型: |
---|---|
资料来源 | 类型:[O1, O2, O3] |
returnsObservable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>]>
combineLatest(sources: [O1, O2, O3, O4]): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>]>
参量: | 类型: |
---|---|
资料来源 | 类型:[O1, O2, O3, O4] |
returnsObservable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>]>
combineLatest(sources: [O1, O2, O3, O4, O5]): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>, ObservedValueOf<O5>]>
参量: | 类型: |
---|---|
资料来源 | 类型:[O1, O2, O3, O4, O5] |
returnsObservable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>, ObservedValueOf<O5>]>
combineLatest(sources: [O1, O2, O3, O4, O5, O6]): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>, ObservedValueOf<O5>, ObservedValueOf<O6>]>
参量: | 类型: |
---|---|
资料来源 | 类型:[O1, O2, O3, O4, O5, O6] |
returnsObservable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>, ObservedValueOf<O5>, ObservedValueOf<O6>]>
combineLatest(sources: O[]): Observable<ObservedValueOf<O>[]>
参量: | 类型: |
---|---|
资料来源 | 类型:O[] |
returnsObservable<ObservedValueOf<O>[]>
combineLatest(v1: O1, scheduler?: SchedulerLike): Observable<[ObservedValueOf<O1>]>
参量: | 类型: |
---|---|
v1 | 类型:O1 |
调度器 | 可选的。默认值为undefined 。类型:SchedulerLike |
returnsObservable<[ObservedValueOf<O1>]>
combineLatest(v1: O1, v2: O2, scheduler?: SchedulerLike): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>]>
参量: | 类型: |
---|---|
v1 | 类型:O1 |
v2 | 类型:O2 |
调度器 | 可选的。默认值为undefined 。类型:SchedulerLike |
returnsObservable<[ObservedValueOf<O1>, ObservedValueOf<O2>]>
combineLatest(v1: O1, v2: O2, v3: O3, scheduler?: SchedulerLike): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>]>
参量: | 类型: |
---|---|
v1 | 类型:O1 |
v2 | 类型:O2 |
v3 | 类型:O3 |
调度器 | 可选的。默认值为undefined 。类型:SchedulerLike |
returnsObservable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>]>
combineLatest(v1: O1, v2: O2, v3: O3, v4: O4, scheduler?: SchedulerLike): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>]>
参量: | 类型: |
---|---|
v1 | 类型:O1 |
v2 | 类型:O2 |
v3 | 类型:O3 |
v4 | 类型:O4 |
调度器 | 可选的。默认值为undefined 。类型:SchedulerLike |
returnsObservable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>]>
combineLatest(v1: O1, v2: O2, v3: O3, v4: O4, v5: O5, scheduler?: SchedulerLike): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>, ObservedValueOf<O5>]>
参量: | 类型: |
---|---|
v1 | 类型:O1 |
v2 | 类型:O2 |
v3 | 类型:O3 |
v4 | 类型:O4 |
v5 | 类型:O5 |
调度器 | 可选的。默认值为undefined 。类型:SchedulerLike |
returnsObservable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>, ObservedValueOf<O5>]>
combineLatest(v1: O1, v2: O2, v3: O3, v4: O4, v5: O5, v6: O6, scheduler?: SchedulerLike): Observable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>, ObservedValueOf<O5>, ObservedValueOf<O6>]>
参量: | 类型: |
---|---|
v1 | 类型:O1 |
v2 | 类型:O2 |
v3 | 类型:O3 |
v4 | 类型:O4 |
v5 | 类型:O5 |
v6 | 类型:O6 |
调度器 | 可选的。默认值为undefined 。类型:SchedulerLike |
returnsObservable<[ObservedValueOf<O1>, ObservedValueOf<O2>, ObservedValueOf<O3>, ObservedValueOf<O4>, ObservedValueOf<O5>, ObservedValueOf<O6>]>
combineLatest(...observables: O[]): Observable<any[]>
参量: | 类型: |
---|---|
可观察的 | 类型:O[] 。 |
returnsObservable<any[]>
combineLatest(...observables: any[]): Observable<R>
参量: | 类型: |
---|---|
可观察的 | 类型:any[] |
returnsObservable<R>
combineLatest(array: O[], resultSelector: (...values: ObservedValueOf<O>[]) => R, scheduler?: SchedulerLike): Observable<R>
参量: | 类型: |
---|---|
数组 | 类型:O[] |
resultSelector | 类型:。(...values: ObservedValueOf[]) => R |
调度器 | 可选的。默认值为undefined 。类型:SchedulerLike |
returnsObservable<R>
combineLatest(...observables: (SchedulerLike | O)[]): Observable<any[]>
参量: | 类型: |
---|---|
可观察的 | 类型:(SchedulerLike O)[] |
returnsObservable<any[]>
combineLatest(...observables: (SchedulerLike | O | ((...values: ObservedValueOf<O>[]) => R))[]): Observable<R>
参量: | 类型: |
---|---|
可观察的 | 类型:。(SchedulerLike O ((...values: ObservedValueOf[]) => R))[] |
returnsObservable<R>
combineLatest(...observables: any[]): Observable<R>
参量: | 类型: |
---|---|
可观察的 | 类型:any[] 。returnsObservable<R> |
更多建议: