我正在寻找一种以同步方式从ReplaySubject.subscribe()
处理事件的方法。
let onSomeEvent = new ReplaySubject();
onSomeEvent.subscribe(async (event) => {
return await this.saveEventToDb(event);
});
在此示例中,saveEventToDb()
首先检查数据库是否已经存储了具有相同ID的事件。如果没有,它将存储。
问题是我需要考虑对主题发射的重复事件。
在此示例中,当2重复事件fire背对背时,两个都将添加到数据库中,因为saveEventToDb()
立即被调用两次,而无需等待先前的呼叫完成。
如何使用RXJS排队?
以下工作来同步处理事件:
onSomeEvent
.map(event => {
return Observable.defer(() => {
return this.saveEventToDb(event);
});
})
.concatAll()
.subscribe();
concatall():收集可观察结果并在上一个完成后订阅下一个。