RxJS concatAll

2020-10-14 09:55 更新

將高階 Observable 轉(zhuǎn)換為的一階 Observable 將內(nèi)部的 Observable 依次排列。

concatAll<T>(): OperatorFunction<ObservableInput<T>, T>

參量

沒有參數(shù)。

returns

OperatorFunction<ObservableInput<T>, T>:從所有內(nèi)部可見的發(fā)射值 觀察值串聯(lián)在一起。

描述

通過放置一個(gè)可觀察的數(shù)來展平 內(nèi)在可觀之后。

concatAll marble diagram

將源發(fā)出的每個(gè) Observable(高階 Observable)加入 系列時(shí)尚。 它僅在 先前的內(nèi)部 Observable 已完成,并將它們的所有值合并到 返回的可觀察值。

警告: 如果源 Observable 迅速發(fā)出 Observable,并且 無休止地發(fā)出,而內(nèi)部的 Observables 發(fā)出的速度通常比 源發(fā)出,您可能會(huì)遇到內(nèi)存問題,因?yàn)閭魅氲?Observable 收集在無界緩沖區(qū)中。

注意: concatAll等效于 mergeAll并發(fā)參數(shù)設(shè)置 到 1。

對(duì)于每個(gè)單擊事件,請(qǐng)從0到3每秒進(jìn)行一次滴答,無需并發(fā)

import { fromEvent, interval } from 'rxjs';
import { map, take, concatAll } from 'rxjs/operators';


const clicks = fromEvent(document, 'click');
const higherOrder = clicks.pipe(
  map(ev => interval(1000).pipe(take(4))),
);
const firstOrder = higherOrder.pipe(concatAll());
firstOrder.subscribe(x => console.log(x));


// Results in the following:
// (results are not concurrent)
// For every click on the "document" it will emit values 0 to 3 spaced
// on a 1000ms interval
// one click = 1000ms-> 0 -1000ms-> 1 -1000ms-> 2 -1000ms-> 3

也可以看看

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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)