RxJS forkJoin

2020-10-13 18:40 更新

接受 Array of ObservableInput 或 of 的字典 Object,ObservableInput 并返回,Observable 其發(fā)出與傳遞的數(shù)組完全相同的順序的值數(shù)組或與傳遞的字典具有相同形狀的值的字典。

forkJoin(...sources: any[]): Observable<any>

參量

sources 以數(shù)組或參數(shù)形式直接傳遞給運(yùn)算符的任意數(shù)量的 Observables。

returns

Observable<any>:可觀察對(duì)象發(fā)出由傳遞的可觀察對(duì)象發(fā)出的最后一個(gè)值的數(shù)組或項(xiàng)目函數(shù)中的值。

描述

等待 Observable 完成,然后合并它們發(fā)出的最后一個(gè)值。

forkJoin大理石圖

forkJoin 是一個(gè)運(yùn)算符,它接受任意數(shù)量的輸入可觀察值,這些輸入可觀察值可以作為輸入可觀察值的數(shù)組或字典傳遞。如果沒(méi)有提供可觀察的輸入,則結(jié)果流將立即完成。

forkJoin 將等待所有傳遞的可觀察變量完成,然后它將發(fā)出一個(gè)數(shù)組或一個(gè)對(duì)象,該數(shù)組或?qū)ο缶哂衼?lái)自相應(yīng)可觀察變量的最后一個(gè)值。

如果將 n 可觀察 n 變量數(shù)組傳遞給運(yùn)算符,則結(jié)果數(shù)組將具有值,其中第一個(gè)值是第一個(gè)可觀察變量發(fā)出的最后一個(gè)值,第二個(gè)值是第二個(gè)可觀察變量發(fā)出的最后一個(gè)值,依此類(lèi)推。

如果將可觀察性字典傳遞給操作員,則生成的對(duì)象將具有與傳遞的字典相同的鍵,并且它們發(fā)出的最后值位于相應(yīng)的鍵處。

這意味著 forkJoin 發(fā)射不會(huì)超過(guò)一次,并且將在此之后完成。如果您不僅需要在傳遞的可觀察變量的生命周期結(jié)束時(shí)發(fā)出組合值,還需要在整個(gè)過(guò)程中發(fā)出組合值,請(qǐng)嘗試一下 combineLatestzip 改為嘗試。

為了使所得數(shù)組的長(zhǎng)度與輸入可觀察數(shù)的長(zhǎng)度相同,每當(dāng)任何一個(gè)可觀察項(xiàng)完成而沒(méi)有發(fā)出任何值時(shí),forkJoin該時(shí)刻也將完成,并且即使已經(jīng)有一些最后一個(gè)也不會(huì)發(fā)出任何東西其他觀測(cè)值的值。相反,如果存在一個(gè)永不完備的可觀察物,那么也 forkJoin 將永遠(yuǎn)也不會(huì)完成,除非在任何時(shí)候任何其他可觀察的完備物都沒(méi)有產(chǎn)生價(jià)值,這使我們回到了前面的情況。總的來(lái)說(shuō),為了 forkJoin 發(fā)出一個(gè)值,作為參數(shù)傳遞的所有可觀察對(duì)象必須發(fā)出至少一次且完整的東西。

如果在某個(gè)點(diǎn)有任何輸入的可觀察錯(cuò)誤,那么 forkJoin 也會(huì)發(fā)生錯(cuò)誤,所有其他可觀察變量將立即取消訂閱。

(可選)forkJoin 接受項(xiàng)目函數(shù),該函數(shù)將使用通常會(huì)位于發(fā)射數(shù)組中的值來(lái)調(diào)用。無(wú)論項(xiàng)目功能返回什么,它將顯示在可觀察的輸出中。這意味著可以將默認(rèn)項(xiàng)目視為具有所有自變量并將其放入數(shù)組的函數(shù)。請(qǐng)注意,僅當(dāng)假定可觀察的輸出會(huì)發(fā)出結(jié)果時(shí),才調(diào)用項(xiàng)目函數(shù)。

例子

將 forkJoin 與可觀察輸入的字典一起使用

import { forkJoin, of, timer } from 'rxjs';


const observable = forkJoin({
  foo: of(1, 2, 3, 4),
  bar: Promise.resolve(8),
  baz: timer(4000),
});
observable.subscribe({
 next: value => console.log(value),
 complete: () => console.log('This is how it ends!'),
});


// Logs:
// { foo: 4, bar: 8, baz: 0 } after 4 seconds
// "This is how it ends!" immediately after

將 forkJoin 與可觀察輸入數(shù)組結(jié)合使用

import { forkJoin, of } from 'rxjs';


const observable = forkJoin([
  of(1, 2, 3, 4),
  Promise.resolve(8),
  timer(4000),
]);
observable.subscribe({
 next: value => console.log(value),
 complete: () => console.log('This is how it ends!'),
});


// Logs:
// [4, 8, 0] after 4 seconds
// "This is how it ends!" immediately after

超載

forkJoin(v1: SubscribableOrPromise<T>): Observable<[T]>

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

returnsObservable<[T]>

forkJoin(v1: any, v2: any): Observable<[T, T2]>

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

returnsObservable<[T, T2]>

forkJoin(v1: any, v2: any, v3: any): Observable<[T, T2, T3]>

參量: 類(lèi)型:
v1 類(lèi)型:any
v2 類(lèi)型:any
v3 類(lèi)型:any

returnsObservable<[T, T2, T3]>

forkJoin(v1: any, v2: any, v3: any, v4: any): Observable<[T, T2, T3, T4]>

參量: 類(lèi)型:
v1 類(lèi)型:any
v2 類(lèi)型:any
v3 類(lèi)型:any
v4 類(lèi)型:any

returnsObservable<[T, T2, T3, T4]>

forkJoin(v1: any, v2: any, v3: any, v4: any, v5: any): Observable<[T, T2, T3, T4, T5]>

參量: 類(lèi)型:
v1 類(lèi)型:any
v2 類(lèi)型:any
v3 類(lèi)型:any
v4 類(lèi)型:any
v5 類(lèi)型:any

returnsObservable<[T, T2, T3, T4, T5]>

forkJoin(v1: any, v2: any, v3: any, v4: any, v5: any, v6: any): Observable<[T, T2, T3, T4, T5, T6]>

參量: 類(lèi)型:
v1 類(lèi)型:any
v2 類(lèi)型:any
v3 類(lèi)型:any
v4 類(lèi)型:any
v5 類(lèi)型:any
v6 類(lèi)型:any

returnsObservable<[T, T2, T3, T4, T5, T6]>

forkJoin(sources: [any]): Observable<[A]>

參量: 類(lèi)型:
sources 類(lèi)型:[any]

returnsObservable<[A]>

forkJoin(sources: [any, any]): Observable<[A, B]>

參量: 類(lèi)型:
sources 類(lèi)型:[any, any]

returnsObservable<[A, B]>

forkJoin(sources: [any, any, any]): Observable<[A, B, C]>

參量: 類(lèi)型:
sources 類(lèi)型:[any, any, any]

returnsObservable<[A, B, C]>

forkJoin(sources: [any, any, any, any]): Observable<[A, B, C, D]>

參量: 類(lèi)型:
sources 類(lèi)型:[any, any, any, any]

returnsObservable<[A, B, C, D]>

forkJoin(sources: [any, any, any, any, any]): Observable<[A, B, C, D, E]>

參量: 類(lèi)型:
sources 類(lèi)型:[any, any, any, any, any]

returnsObservable<[A, B, C, D, E]>

forkJoin(sources: [any, any, any, any, any, any]): Observable<[A, B, C, D, E, F]>

參量: 類(lèi)型:
sources 類(lèi)型:[any, any, any, any, any, any]

returnsObservable<[A, B, C, D, E, F]>

forkJoin(sources: A): Observable<ObservedValuesFromArray<A>[]>

參量: 類(lèi)型:
sources 類(lèi)型:A returnsObservable<ObservedValuesFromArray<A>[]>

forkJoin(sourcesObject: {}): Observable<never>

參量: 類(lèi)型:
sourcesObject 類(lèi)型:{}

returnsObservable<never>

forkJoin(sourcesObject: T): Observable<{ [K in keyof T]: ObservedValueOf<T[K]>; }>

參量: 類(lèi)型:
sourcesObject 類(lèi)型:T

returnsObservable<{ [K in keyof T]: ObservedValueOf<T[K]>; }>

forkJoin(...args: any[]): Observable<any>

參量: 類(lèi)型:
args 類(lèi)型:any[]

returnsObservable<any>

forkJoin(...sources: any[]): Observable<T[]>

參量: 類(lèi)型:
sources 類(lèi)型:any[]
returnsObservable<T[]>

也可以看看

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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)