RxJS defer

2020-10-13 18:37 更新

創(chuàng)建一個 Observable,在訂閱時,該 Observable 調(diào)用一個 Observable 工廠以為每個新的 Observer 創(chuàng)建 Observable。

defer<R extends ObservableInput<any> | void>(observableFactory: () => R): Observable<ObservedValueOf<R>>

參量

observableFactory Observable 工廠函數(shù),用于為預訂輸出 Observable 的每個 Observer 調(diào)用。也可能會返回一個 Promise,它將即時轉(zhuǎn)換為 Observable。

returns

Observable<ObservedValueOf<R>>:一個 Observable,其 Observers 的訂閱觸發(fā)對給定 Observable 工廠函數(shù)的調(diào)用。

描述

延遲創(chuàng)建 Observable,即僅在訂閱時創(chuàng)建。

推遲大理石圖

defer允許您僅在觀察者訂閱時創(chuàng)建觀察者,并為每個觀察者創(chuàng)建一個新的觀察者。它等待,直到觀察者訂閱它,然后它生成一個觀察者,通常帶有觀察者工廠功能。它為每個訂閱用戶重新進行此操作,因此盡管每個訂閱用戶可能認為自己正在訂閱相同的 Observable,但實際上每個訂閱用戶都擁有自己的個人 Observable。

隨機訂閱可觀察的點擊或間隔的觀察

import { defer, fromEvent, interval } from 'rxjs';


const clicksOrInterval = defer(function () {
  return Math.random() > 0.5
    ? fromEvent(document, 'click')
    : interval(1000);
});
clicksOrInterval.subscribe(x => console.log(x));


// Results in the following behavior:
// If the result of Math.random() is greater than 0.5 it will listen
// for clicks anywhere on the "document"; when document is clicked it
// will log a MouseEvent object to the console. If the result is less
// than 0.5 it will emit ascending numbers, one every second(1000ms).

也可以看看

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號