RxJS concatMap

2020-10-14 09:56 更新

將每個(gè)源值投影到一個(gè) Observable 中,將其合并到輸出中 可觀察,以序列化的方式等待每個(gè)完成之前 合并下一個(gè)。

concatMap<T, R, O extendsObservableInput<any>>(project: (value: T, index: number) => O, resultSelector?: (outerValue: T, innerValue: ObservedValueOf<O>, outerIndex: number, innerIndex: number) => R):OperatorFunction<T, ObservedValueOf<O> | R>

參量

項(xiàng)目 功能 應(yīng)用于源 Observable 發(fā)出的項(xiàng)目時(shí),返回一個(gè) 可觀察的。
resultSelector 可選的。 默認(rèn)值為 undefined。         類型: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R

returns

OperatorFunction<T, ObservedValueOf<O> | R>:一個(gè) Observable,發(fā)出應(yīng)用 投影函數(shù)(和可選的不推薦使用 resultSelector每個(gè)發(fā)射項(xiàng)目的 ) 來源觀察到并從每個(gè)投影內(nèi)部獲取值 依序可觀察。

描述

將每個(gè)值映射到一個(gè) Observable,然后展平所有 這些內(nèi)部 Observable 使用 concatAll。

concatMap marble diagram

返回一個(gè) Observable,它根據(jù)應(yīng)用的函數(shù)發(fā)射項(xiàng)目 提供給源 Observable 發(fā)出的每個(gè)項(xiàng)目,該函數(shù)在哪里 返回一個(gè)(所謂的“內(nèi)部”)Observable。 每個(gè)新的內(nèi)部 Observable 是 與先前的內(nèi)部 Observable 串聯(lián)。

警告: 如果源值無休止地到達(dá)并且比它們更快地到達(dá) 相應(yīng)的內(nèi)部 Observables 可以完成,這將導(dǎo)致內(nèi)存問題 當(dāng)內(nèi)部 Observable 聚集在一個(gè)無界緩沖區(qū)中時(shí),它們等待轉(zhuǎn)向 被訂閱。

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

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

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


const clicks = fromEvent(document, 'click');
const result = clicks.pipe(
  concatMap(ev => interval(1000).pipe(take(4)))
);
result.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

超載

concatMap(project: (value: T, index: number) => O): OperatorFunction<T, ObservedValueOf<O>>

參量 類型
項(xiàng)目 類型: (value: T, index: number) => O

returns OperatorFunction<T, ObservedValueOf<O>> `

concatMap(project: (value: T, index: number) => O, resultSelector: undefined): OperatorFunction<T, ObservedValueOf<O>> `

參量 類型
項(xiàng)目 類型: (value: T, index: number) => O
resultSelector 類型: undefined

returns OperatorFunction<T, ObservedValueOf<O>>

concatMap(project: (value: T, index: number) => O, resultSelector: (outerValue: T, innerValue: ObservedValueOf<O>, outerIndex: number, innerIndex: number) => R): OperatorFunction<T, R>

參量 類型
項(xiàng)目 類型: (value: T, index: number) => O
resultSelector 類型: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R

returns OperatorFunction<T, R>

也可以看看

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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)