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

  1. import { iif, of } from 'rxjs';
  2. let subscribeToFirst;
  3. const firstOrSecond = iif(
  4. () => subscribeToFirst,
  5. of('first'),
  6. of('second'),
  7. );
  8. subscribeToFirst = true;
  9. firstOrSecond.subscribe(value => console.log(value));
  10. // Logs:
  11. // "first"
  12. subscribeToFirst = false;
  13. firstOrSecond.subscribe(value => console.log(value));
  14. // Logs:
  15. // "second"

控制对可观察对象的访问

  1. let accessGranted;
  2. const observableIfYouHaveAccess = iif(
  3. () => accessGranted,
  4. of('It seems you have an access...'), // Note that only one Observable is passed to the operator.
  5. );
  6. accessGranted = true;
  7. observableIfYouHaveAccess.subscribe(
  8. value => console.log(value),
  9. err => {},
  10. () => console.log('The end'),
  11. );
  12. // Logs:
  13. // "It seems you have an access..."
  14. // "The end"
  15. accessGranted = false;
  16. observableIfYouHaveAccess.subscribe(
  17. value => console.log(value),
  18. err => {},
  19. () => console.log('The end'),
  20. );
  21. // Logs:
  22. // "The end"

也可以看看

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号