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

公众号
微信公众号

编程狮公众号