我使用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}}。