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"
更多建议: