RxJS iif

2020-10-13 18:43 更新

在預訂時確定將實際預訂 Observable 的時間。

iif<T = never, F = never>(condition: () => boolean, trueResult: SubscribableOrPromise<T> = EMPTY, falseResult: SubscribableOrPromise<F> = EMPTY): Observable<T | F>

參量

condition 應該選擇可觀察的條件。
trueResult 可選的。默認值為EMPTY。類型:。SubscribableOrPromise
錯誤結果 可選的。默認值為EMPTY。類型:。SubscribableOrPromise

returns

Observable<T | F>:根據情況,第一個或第二個可觀察值。

描述

If Observables的聲明。

iif接受條件函數和兩個 Observable。訂閱操作員返回的Observable時,將調用條件函數。根據此時返回的布爾值,使用者將訂閱第一個 Observable(如果條件為 true)或第二個(如果條件為 false)。條件函數也可能不返回任何內容-在這種情況下,條件將被評估為 false,第二個 Observable 將被訂閱。

請注意,兩種情況(true 和 false)的 Observables 是可選的。如果條件指向未定義的 Observable,則結果流將立即立即完成。這樣,您可以在運行時確定使用者是否應有權訪問給定的 Observable,而不是控制將訂閱哪個 Observable。

如果您具有更復雜的邏輯,需要在兩個以上的 Observable 之間進行決策,defer 則可能是一個更好的選擇。實際上,iif 可以方便地實現,defer 并且僅出于方便和易讀性的原因而存在。

例子

在運行時更改將訂閱哪些 Observable

import { iif, of } from 'rxjs';


let subscribeToFirst;
const firstOrSecond = iif(
  () => subscribeToFirst,
  of('first'),
  of('second'),
);


subscribeToFirst = true;
firstOrSecond.subscribe(value => console.log(value));


// Logs:
// "first"


subscribeToFirst = false;
firstOrSecond.subscribe(value => console.log(value));


// Logs:
// "second"

控制對可觀察對象的訪問

let accessGranted;
const observableIfYouHaveAccess = iif(
  () => accessGranted,
  of('It seems you have an access...'), // Note that only one Observable is passed to the operator.
);


accessGranted = true;
observableIfYouHaveAccess.subscribe(
  value => console.log(value),
  err => {},
  () => console.log('The end'),
);


// Logs:
// "It seems you have an access..."
// "The end"


accessGranted = false;
observableIfYouHaveAccess.subscribe(
  value => console.log(value),
  err => {},
  () => console.log('The end'),
);


// Logs:
// "The end"

也可以看看

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號