RxJS combineLatest

2020-10-13 18:35 更新

组合多个 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 中收集最新值的数组。因此,如果将nObservables 传递给运算符,则返回的 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>

也可以看看

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号