RxJS concat

2020-10-13 18:36 更新

創(chuàng)建一個(gè)輸出 Observable,該輸出依次從給定的 Observable 發(fā)出所有值,然后移至下一個(gè)。

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

參量

可觀察的 類(lèi)型:`(SchedulerLike O)[]`。

returns

Observable<ObservedValueOf<O> | R>:每個(gè)傳遞的Observable的所有值都以串行方式按順序合并到單個(gè)Observable中。

描述

通過(guò)依次發(fā)射它們的值將多個(gè)Observable串聯(lián)在一起,一個(gè)Observable接一個(gè)。

康卡特大理石圖

concat 通過(guò)一次訂閱多個(gè) Observable,并將其結(jié)果合并到輸出 Observable 中,將多個(gè) Observable 連接在一起。您可以傳遞一個(gè) Observable 數(shù)組,也可以將它們直接作為參數(shù)。傳遞空數(shù)組將導(dǎo)致 Observable 立即完成。

concat`將訂閱第一個(gè)輸入 Observable 并發(fā)出其所有值,而不會(huì)以任何方式更改或影響它們。當(dāng)該 Observable 完成時(shí),它將訂閱然后傳遞的下一個(gè) Observable,并再次發(fā)出其值。將重復(fù)此操作,直到操作員用完 Observable。當(dāng)最后一個(gè)輸入 Observable 完成時(shí), `concat`也將完成。在任何給定時(shí)刻,只有一個(gè)傳遞給運(yùn)算符的 Observable 會(huì)發(fā)出值。如果您希望同時(shí)從傳遞的 Observable 發(fā)出值,請(qǐng)[`merge`](https://rxjs.dev/api/index/function/merge)改為檢出 ,特別是使用可選`concurrent`參數(shù)時(shí)。實(shí)際上, 參數(shù)設(shè)置為`concat`等于`merge`運(yùn)算符。`concurrent``1

請(qǐng)注意,如果某些輸入的 Observable 永遠(yuǎn)不會(huì)完成,那么 concat 也將永遠(yuǎn)不會(huì)完成,而未完成的輸入之后的 Observables 也將不會(huì)被訂閱。另一方面,如果某個(gè) Observable 僅在訂閱后立即完成,則對(duì)于來(lái)說(shuō)將是不可見(jiàn)的 concat,它將繼續(xù)前進(jìn)到下一個(gè) Observable。

如果任何可觀察的鏈錯(cuò)誤,而不是將控制權(quán)傳遞給下一個(gè)可觀察的鏈, concat 也會(huì)立即發(fā)生錯(cuò)誤。在發(fā)出錯(cuò)誤的事件之后將被訂閱的可觀察對(duì)象永遠(yuǎn)不會(huì)。

如果 concat 多次傳遞給同一 Observable,則其值的流將在每個(gè)訂閱上“重播”,這意味著您可以根據(jù)需要重復(fù)給定 Observable 多次。如果將相同的 Observable 傳遞 concat 1000 次變得乏味,則可以隨時(shí)使用 repeat

例子

連接一個(gè)從 0 到 3 的計(jì)時(shí)器和一個(gè)從 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 個(gè)可觀察值

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 以重復(fù)它

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>>

參量: 類(lèi)型:
v1 類(lèi)型:O1
調(diào)度器 類(lèi)型:SchedulerLike

returnsObservable<ObservedValueOf<O1>>

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

參量: 類(lèi)型:
v1 類(lèi)型:O1
v2 類(lèi)型:O2
調(diào)度器 類(lèi)型:SchedulerLike

returnsObservable<ObservedValueOf<O1> ObservedValueOf<O2>>

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

參量: 類(lèi)型:
v1 類(lèi)型:O1
v2 類(lèi)型:O2
v3 類(lèi)型:O3
調(diào)度器 類(lèi)型: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>>

參量: 類(lèi)型:
v1 類(lèi)型:O1
v2 類(lèi)型:O2
v3 類(lèi)型:O3
v4 類(lèi)型:O4
調(diào)度器 類(lèi)型: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>>

參量: 類(lèi)型:
v1 類(lèi)型:O1
v2 類(lèi)型:O2
v3 類(lèi)型:O3
v4 類(lèi)型:O4
v5 類(lèi)型:O5
調(diào)度器 類(lèi)型: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>>

參量: 類(lèi)型:
v1 類(lèi)型:O1
v2 類(lèi)型:O2
v3 類(lèi)型:O3
v4 類(lèi)型:O4
v5 類(lèi)型:O5
v6 類(lèi)型:O6
調(diào)度器 類(lèi)型:SchedulerLike

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

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

參量: 類(lèi)型:
v1 類(lèi)型:O1

returnsObservable<ObservedValueOf<O1>>

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

參量: 類(lèi)型:
v1 類(lèi)型:O1
v2 類(lèi)型:O2

returnsObservable<ObservedValueOf<O1> ObservedValueOf<O2>>

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

參量: 類(lèi)型:
v1 類(lèi)型:O1
v2 類(lèi)型:O2
v3 類(lèi)型: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>>

參量: 類(lèi)型:
v1 類(lèi)型:O1
v2 類(lèi)型:O2
v3 類(lèi)型:O3
v4 類(lèi)型: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>>

參量: 類(lèi)型:
v1 類(lèi)型:O1
v2 類(lèi)型:O2
v3 類(lèi)型:O3
v4 類(lèi)型:O4
v5 類(lèi)型: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>>

參量: 類(lèi)型:
v1 類(lèi)型:O1
v2 類(lèi)型:O2
v3 類(lèi)型:O3
v4 類(lèi)型:O4
v5 類(lèi)型:O5
v6 類(lèi)型:O6

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

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

參量: 類(lèi)型:
可觀察的 類(lèi)型:O[]

returnsObservable<ObservedValueOf<O>>

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

參量: 類(lèi)型:
可觀察的 類(lèi)型:(SchedulerLike  O)[]

returnsObservable<ObservedValueOf<O>>

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

參量: 類(lèi)型:
可觀察的 類(lèi)型:any[]

returnsObservable<R>

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

參量: 類(lèi)型:
可觀察的 類(lèi)型:any[]

returnsObservable<R>

也可以看看

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)