过程可观察到的事件同步订阅事件



我正在寻找一种以同步方式从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():收集可观察结果并在上一个完成后订阅下一个。

最新更新