codecamp

RxJS iif

在预订时确定将实际预订 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"

也可以看看

RxJS identity
RxJS InteropObservable
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

RxJS operators

RxJS fetch

RxJS testing

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }