Rxjs - Operators - DelayWhen

Signature

export declare function delayWhen<T>(
delayDurationSelector: (value: T) => Observable<any>,
subscriptionDelay?: Observable<any>): Observable<T>;

Parameters

第一个function 返回 一个流,这个流控制什么时候 delay结束

第二个参数流是控制整个delayWhen的流什么时候开始subscribe

Example

var clicks = Rx.Observable.fromEvent(document, 'click');
var delayedClicks = clicks.delayWhen(event => Rx.Observable.fromEvent(document, 'keydown'), Rx.Observable.fromEvent(document, 'dblclick'));

delayedClicks.subscribe(x => console.log(x));

解释

这个例子很有意义

首先要双击,让 delayedClicks 流开启.
然后你clicks里的流才会流进delayedClicks.
这时你 按键盘来接触delay. 在keydown之前 和 双击之后这段时间内的 click 就会发出

然后你在几次 click, 他依然是delay, 知道你keydown出来解除delay

场景

subscriptionDelay 这个是大开关,这个不触发,你整个流根本不会开始订阅

delayDurationSelector 这个是小开关,大开关打开后, 每次小开关开启,之前关在流里的数据就会出来,流完又会关闭小开关.
直到下次小开关开启

一个是流启动,开始存数据
一个是流释放,放出之前一段时间存的数据