0

イベントで終了する監視可能なイベントのストリームがあります。ただし、いったん終了すると、ストリームを最初からやり直す必要があります。ストリームの表現は次のとおりです。

awaitStartEvent()
  .switchMap(value -> awaitSecondEvent(value))
  .subscribe(result -> {
    doSomethingWithResult(result);
    // need to start at awaitStartEvent again here
  }, error -> {
    handleError(error);
    // need to start at awaitStartEvent again here
  }

この状況を処理するための良い方法は何ですか?

4

3 に答える 3

0

@maxost のコメントに従って、Repeat演算子を使用します。Retryエラーが発生しても続行する場合は、そこにも演算子を追加する必要があります。handleErrorこれは、最終的なサブスクリプションでこれらのエラーが表示されることはないため、ロジックを配置する必要がある場所です。

于 2016-12-14T13:46:06.097 に答える
0

repeatandが必要retryですがhandleError、質問に副作用があるため、例外は下流に伝播され、retryオペレーターによって処理されません。

ここではdo、演算子のクラスを使用しています。

awaitStartEvent()
  .switchMap(value -> awaitSecondEvent(value))
  .doOnNext(result -> { doSomethingWithResult(result); })
  .doOnError(error -> { handleError(error); })
  .repeat()
  .retry()
  .subscribe();
于 2016-12-14T17:34:52.330 に答える