RxJS:仅将超时运算符应用于序列的一部分

时间:2017-02-28 17:03:40

标签: javascript rxjs

我使用RxJS Observables来串行处理流多个事件。我想首先听event1,然后等待event2一次,然后完成。我需要确保{1}在1s内首先发出(如果没有则抛出错误)。 event1运算符非常适合这种情况。但是,之后我需要允许无限期地等待.timeout

以下是我尝试的内容:

event2

这将始终导致超时错误,因为 const windowMessage$ = Rx.Observable .fromEvent(window, 'message') .publish() .refCount(); const event1$ = windowMessage$.filter(e => e.data && e.data.type === 'event1'); const event2$ = windowMessage$.filter(e => e.data && e.data.type === 'event2'); const source$ = event1$ .timeout(1000) .switchMap(event2$) .take(1); source$.subscribe( data => console.log('got data', data), console.error.bind(console), () => console.log('complete') ); (预期)不会在1秒内发出。 我猜测问题是event2运算符对它在链中的位置漠不关心。

我意识到另一种选择可能是使用.timeout运算符来确保.race()早于1秒进入,但我目前正在使用没有{event1的RxJS v4 1}}。

0 个答案:

没有答案