RxJS windowWhen

2020-10-14 10:45 更新

使用來(lái)將源 Observable 值分支為嵌套 Observable 關(guān)閉 Observables 的工廠功能,以確定何時(shí)啟動(dòng)新的 窗口。

windowWhen<T>(closingSelector: () => Observable<any>): OperatorFunction<T, Observable<T>>

參量

關(guān)閉選擇器 一個(gè)不需要 參數(shù)并返回一個(gè)Observable信號(hào)(在 nextcomplete)何時(shí)關(guān)閉上一個(gè)窗口并開(kāi)始一個(gè)新窗口。

returns

OperatorFunction<T, Observable<T>>:可觀察到的窗戶(hù) 是可觀察的。

描述

就像 bufferWhen,但發(fā)出嵌套 可觀察的而不是數(shù)組。

windowWhen marble diagram

返回一個(gè) Observable,它發(fā)出從源收集到的項(xiàng)目的窗口 可觀察的。 輸出 Observable 發(fā)出連接的非重疊窗口。 它發(fā)出當(dāng)前窗口,并在可觀察到的任何時(shí)候打開(kāi)一個(gè)新窗口。 由指定 closingSelector函數(shù)產(chǎn)生的發(fā)射項(xiàng)。 首先 訂閱輸出 Observable 時(shí),窗口將立即打開(kāi)。

在 [1-5] 個(gè)隨機(jī)秒的每個(gè)窗口中僅發(fā)出前兩次單擊事件

import { fromEvent, interval } from 'rxjs';
import { windowWhen, map, mergeAll, take } from 'rxjs/operators';


const clicks = fromEvent(document, 'click');
const result = clicks.pipe(
  windowWhen(() => interval(1000 + Math.random() * 4000)),
  map(win => win.pipe(take(2))),     // each window has at most 2 emissions
  mergeAll()                         // flatten the Observable-of-Observables
);
result.subscribe(x => console.log(x));

也可以看看

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)