RxJS concat

2020-10-13 18:36 更新

创建一个输出 Observable,该输出依次从给定的 Observable 发出所有值,然后移至下一个。

concat<O extends ObservableInput<any>, R>(...observables: (SchedulerLike | O)[]): Observable<ObservedValueOf<O> | R>

参量

可观察的 类型:`(SchedulerLike O)[]`。

returns

Observable<ObservedValueOf<O> | R>:每个传递的Observable的所有值都以串行方式按顺序合并到单个Observable中。

描述

通过依次发射它们的值将多个Observable串联在一起,一个Observable接一个。

康卡特大理石图

concat 通过一次订阅多个 Observable,并将其结果合并到输出 Observable 中,将多个 Observable 连接在一起。您可以传递一个 Observable 数组,也可以将它们直接作为参数。传递空数组将导致 Observable 立即完成。

concat`将订阅第一个输入 Observable 并发出其所有值,而不会以任何方式更改或影响它们。当该 Observable 完成时,它将订阅然后传递的下一个 Observable,并再次发出其值。将重复此操作,直到操作员用完 Observable。当最后一个输入 Observable 完成时, `concat`也将完成。在任何给定时刻,只有一个传递给运算符的 Observable 会发出值。如果您希望同时从传递的 Observable 发出值,请[`merge`](https://rxjs.dev/api/index/function/merge)改为检出 ,特别是使用可选`concurrent`参数时。实际上, 参数设置为`concat`等于`merge`运算符。`concurrent``1

请注意,如果某些输入的 Observable 永远不会完成,那么 concat 也将永远不会完成,而未完成的输入之后的 Observables 也将不会被订阅。另一方面,如果某个 Observable 仅在订阅后立即完成,则对于来说将是不可见的 concat,它将继续前进到下一个 Observable。

如果任何可观察的链错误,而不是将控制权传递给下一个可观察的链, concat 也会立即发生错误。在发出错误的事件之后将被订阅的可观察对象永远不会。

如果 concat 多次传递给同一 Observable,则其值的流将在每个订阅上“重播”,这意味着您可以根据需要重复给定 Observable 多次。如果将相同的 Observable 传递 concat 1000 次变得乏味,则可以随时使用 repeat

例子

连接一个从 0 到 3 的计时器和一个从 1 到 10 的同步序列

import { concat, interval, range } from 'rxjs';
import { take } from 'rxjs/operators';


const timer = interval(1000).pipe(take(4));
const sequence = range(1, 10);
const result = concat(timer, sequence);
result.subscribe(x => console.log(x));


// results in:
// 0 -1000ms-> 1 -1000ms-> 2 -1000ms-> 3 -immediate-> 1 ... 10

连接 3 个可观察值

import { concat, interval } from 'rxjs';
import { take } from 'rxjs/operators';


const timer1 = interval(1000).pipe(take(10));
const timer2 = interval(2000).pipe(take(6));
const timer3 = interval(500).pipe(take(10));


const result = concat(timer1, timer2, timer3);
result.subscribe(x => console.log(x));


// results in the following:
// (Prints to console sequentially)
// -1000ms-> 0 -1000ms-> 1 -1000ms-> ... 9
// -2000ms-> 0 -2000ms-> 1 -2000ms-> ... 5
// -500ms-> 0 -500ms-> 1 -500ms-> ... 9

连接相同的 Observable 以重复它

import { concat, interval } from 'rxjs';
import { take } from 'rxjs/operators';


const timer = interval(1000).pipe(take(2));


concat(timer, timer) // concatenating the same Observable!
.subscribe(
  value => console.log(value),
  err => {},
  () => console.log('...and it is done!')
);


// Logs:
// 0 after 1s
// 1 after 2s
// 0 after 3s
// 1 after 4s
// "...and it is done!" also after 4s

超载

concat(v1: O1, scheduler: SchedulerLike): Observable<ObservedValueOf<O1>>

参量: 类型:
v1 类型:O1
调度器 类型:SchedulerLike

returnsObservable<ObservedValueOf<O1>>

concat(v1: O1, v2: O2, scheduler: SchedulerLike): Observable<ObservedValueOf<O1> ObservedValueOf<O2>>

参量: 类型:
v1 类型:O1
v2 类型:O2
调度器 类型:SchedulerLike

returnsObservable<ObservedValueOf<O1> ObservedValueOf<O2>>

concat(v1: O1, v2: O2, v3: O3, scheduler: SchedulerLike): Observable<ObservedValueOf<O1> ObservedValueOf<O2> | ObservedValueOf<O3>>

参量: 类型:
v1 类型:O1
v2 类型:O2
v3 类型:O3
调度器 类型:SchedulerLike

returnsObservable<ObservedValueOf<O1> ObservedValueOf<O2> ObservedValueOf<O3>>

concat(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
调度器 类型:SchedulerLike

returnsObservable<ObservedValueOf<O1> ObservedValueOf<O2> ObservedValueOf<O3> ObservedValueOf<O4>> concat(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
调度器 类型:SchedulerLike

returnsObservable<ObservedValueOf<O1> ObservedValueOf<O2> ObservedValueOf<O3> ObservedValueOf<O4> ObservedValueOf<O5>>

concat(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
调度器 类型:SchedulerLike

returnsObservable<ObservedValueOf<O1> ObservedValueOf<O2> ObservedValueOf<O3> ObservedValueOf<O4> ObservedValueOf<O5> ObservedValueOf<O6>>

concat(v1: O1): Observable<ObservedValueOf<O1>>

参量: 类型:
v1 类型:O1

returnsObservable<ObservedValueOf<O1>>

concat(v1: O1, v2: O2): Observable<ObservedValueOf<O1> ObservedValueOf<O2>>

参量: 类型:
v1 类型:O1
v2 类型:O2

returnsObservable<ObservedValueOf<O1> ObservedValueOf<O2>>

concat(v1: O1, v2: O2, v3: O3): Observable<ObservedValueOf<O1> ObservedValueOf<O2> ObservedValueOf<O3>>

参量: 类型:
v1 类型:O1
v2 类型:O2
v3 类型:O3

returnsObservable<ObservedValueOf<O1> ObservedValueOf<O2> ObservedValueOf<O3>>

concat(v1: O1, v2: O2, v3: O3, v4: O4): Observable<ObservedValueOf<O1> ObservedValueOf<O2> ObservedValueOf<O3> ObservedValueOf<O4>>

参量: 类型:
v1 类型:O1
v2 类型:O2
v3 类型:O3
v4 类型:O4

returnsObservable<ObservedValueOf<O1> ObservedValueOf<O2> ObservedValueOf<O3> ObservedValueOf<O4>>

concat(v1: O1, v2: O2, v3: O3, v4: O4, v5: O5): Observable<ObservedValueOf<O1> ObservedValueOf<O2> ObservedValueOf<O3> ObservedValueOf<O4> ObservedValueOf<O5>>

参量: 类型:
v1 类型:O1
v2 类型:O2
v3 类型:O3
v4 类型:O4
v5 类型:O5

returnsObservable<ObservedValueOf<O1> ObservedValueOf<O2> ObservedValueOf<O3> ObservedValueOf<O4> ObservedValueOf<O5>>

concat(v1: O1, v2: O2, v3: O3, v4: O4, v5: O5, v6: O6): 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

returnsObservable<ObservedValueOf<O1> ObservedValueOf<O2> ObservedValueOf<O3> ObservedValueOf<O4> ObservedValueOf<O5> ObservedValueOf<O6>>

concat(...observables: O[]): Observable<ObservedValueOf<O>>

参量: 类型:
可观察的 类型:O[]

returnsObservable<ObservedValueOf<O>>

concat(...observables: (SchedulerLike O)[]): Observable<ObservedValueOf<O>>

参量: 类型:
可观察的 类型:(SchedulerLike  O)[]

returnsObservable<ObservedValueOf<O>>

concat(...observables: any[]): Observable<R>

参量: 类型:
可观察的 类型:any[]

returnsObservable<R>

concat(...observables: any[]): Observable<R>

参量: 类型:
可观察的 类型:any[]

returnsObservable<R>

也可以看看

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

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号