2017-12-11 16 views
1

ReplaySubject.subscribe()からイベントを同期的に処理する方法を探しています。この例では観測可能なサブスクライブイベントを同期して処理する

let onSomeEvent = new ReplaySubject(); 

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

saveEventToDb()を最初にチェック同じIDを持つイベントが既に格納されたかどうかをデータベース。そうでなければ、それを保存する。

問題は、被験者からの重複イベントの発生を考慮する必要があることです。

saveEventToDb()が直前の呼び出しが完了するのを待たずに即座に2回コールされるため、この例では、2つのイベントが連続して発生すると、データベースに両方のイベントが発生します。

これらをRxjsでキューに登録するにはどうすればよいですか?

答えて

1

以下は、同期イベントを処理するために働いていた:

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

ConcatAll():観測を収集し、次の時に、前の完了を購読してください。