RxJS exhaust
通过在先前内部 Observable 尚未完成之前删除内部 Observable,将高阶 Observable 转换为一阶 Observable。
exhaust<T>(): OperatorFunction
<any, T>
参量
没有参数。
returns
OperatorFunction<any, T>
:一个 Observable,它获取 Observable 的源,并专门传播第一个 Observable,直到它完成,然后订阅下一个 Observable。
描述
在当前内部 Observable 仍在执行时,通过删除下一个内部 Observable 来展平 Observable-of-Observables。
exhaust
订阅发出 Observable 的 Observable,也称为高阶 Observable。每次观察到这些内部可观察对象发射的一个时,输出 Observable 便开始发射该内部可观察对象发射的项目。到目前为止,它的行为类似于mergeAll
。但是,exhaust
如果先前的 Observable 尚未完成,则 忽略每个新的内部 Observable。完成后,它将接受并展平下一个内部 Observable,并重复此过程。
例
仅当当前没有活动的计时器时,才为每次点击运行一个有限的计时器
import { fromEvent, interval } from 'rxjs';
import { exhaust, map, take } from 'rxjs/operators';
const clicks = fromEvent(document, 'click');
const higherOrder = clicks.pipe(
map((ev) => interval(1000).pipe(take(5))),
);
const result = higherOrder.pipe(exhaust());
result.subscribe(x => console.log(x));