【问题标题】:Process observable subscribe events synchronously同步处理可观察的订阅事件
【发布时间】:2017-12-11 04:40:07
【问题描述】:

我正在寻找一种以同步方式处理来自ReplaySubject.subscribe() 的事件的方法。

let onSomeEvent = new ReplaySubject();

onSomeEvent.subscribe(async (event) => {      
  return await this.saveEventToDb(event);
});

在此示例中,saveEventToDb() 首先检查数据库是否已存储具有相同 ID 的事件。如果没有,它会存储它。

问题是我需要考虑从主题触发的重复事件。

在此示例中,当 2 个重复事件连续触发时,两者都会被添加到数据库中,因为 saveEventToDb() 会立即被调用两次,而无需等待上一次调用完成。

如何使用 Rxjs 将它们排队?

【问题讨论】:

    标签: javascript rxjs5


    【解决方案1】:

    以下工作用于同步处理事件:

    onSomeEvent
        .map(event => {
           return Observable.defer(() => {
              return this.saveEventToDb(event);
           });
        })
        .concatAll()
        .subscribe();
    

    ConcatAll(): 收集 observables 并在上一个完成时订阅下一个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-28
      • 1970-01-01
      • 2018-07-21
      • 1970-01-01
      • 1970-01-01
      • 2019-06-19
      • 2020-07-21
      相关资源
      最近更新 更多