RxJS iif

2020-10-13 18:43 更新

在預(yù)訂時(shí)確定將實(shí)際預(yù)訂 Observable 的時(shí)間。

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

參量

condition 應(yīng)該選擇可觀察的條件。
trueResult 可選的。默認(rèn)值為EMPTY。類型:。SubscribableOrPromise
錯(cuò)誤結(jié)果 可選的。默認(rèn)值為EMPTY。類型:。SubscribableOrPromise

returns

Observable<T | F>:根據(jù)情況,第一個(gè)或第二個(gè)可觀察值。

描述

If Observables的聲明。

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

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

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

例子

在運(yùn)行時(shí)更改將訂閱哪些 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"

控制對(duì)可觀察對(duì)象的訪問(wèn)

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"

也可以看看

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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)