RxJS switchMap

2020-10-14 10:36 更新

將每個源值投影到一個 Observable,將其合并到輸出 Observable中,僅從最近投影的 Observable 發(fā)出值。

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

參量

項目 當應用于源 Observable 發(fā)出的項目時,返回 Observable 的函數(shù)。
resultSelector 可選的。默認值為undefined。類型:。(outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R

returns

OperatorFunction<T, ObservedValueOf<O> | R>:一個 Observable,它發(fā)出對resultSelector源 Observable 發(fā)出的每個項目應用投影函數(shù)(和可選的不推薦使用)的結果,并且僅從最近投影的內(nèi)部 Observable 中獲取值。

描述

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

switchMap大理石圖

返回一個 Observable,它基于將您提供的函數(shù)應用于源 Observable 發(fā)出的每個項目而發(fā)出項目,其中該函數(shù)返回一個(所謂的“內(nèi)部”)Observable。每當它觀察到這些內(nèi)部 Observable 中的一個時,輸出 Observable 就開始發(fā)出該內(nèi)部 Observable 發(fā)出的項目。發(fā)出新的內(nèi)部 Observable 時,switchMap 停止從較早發(fā)出的內(nèi)部 Observable 發(fā)出項目,并開始從新的內(nèi)部 Observable 發(fā)出項目。對于后續(xù)的內(nèi)部 Observable,它繼續(xù)像這樣運行。

根據(jù)源可觀測值生成新的可觀測值

import { of } from 'rxjs';
import { switchMap } from 'rxjs/operators';


const switched = of(1, 2, 3).pipe(switchMap((x: number) => of(x, x ** 2, x ** 3)));
switched.subscribe(x => console.log(x));
// outputs
// 1
// 1
// 1
// 2
// 4
// 8
// ... and so on

在每個點擊事件上重新運行可觀察到的間隔

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


const clicks = fromEvent(document, 'click');
const result = clicks.pipe(switchMap((ev) => interval(1000)));
result.subscribe(x => console.log(x));

超載

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

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

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

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

returnsOperatorFunction<T, ObservedValueOf<O>>

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

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

returnsOperatorFunction<T, R>

也可以看看

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號