可观察的流



我有一个可观察的事件流,这些事件终止于事件。但是,一旦终止,我就需要从一开始就重新开始。流的表示:

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
  }

处理这种情况的好方法是什么?

根据 @maxost的注释,使用Repeat操作员。如果您也希望它在面对错误时继续,那么您也需要在其中添加Retry操作员。这是您需要将handleError逻辑放置的地方,因为最终订阅将不会看到这些错误。

您需要 repeatretry,但是由于问题中的 handleError副作用,因此不会在下游传播该异常来由retry操作员处理。

在这里使用do运算符类。

awaitStartEvent()
  .switchMap(value -> awaitSecondEvent(value))
  .doOnNext(result -> { doSomethingWithResult(result); })
  .doOnError(error -> { handleError(error); })
  .repeat()
  .retry()
  .subscribe();
awaitStartEvent()
    .switchMap(value -> awaitSecondEvent(value))
    .doOnNext(result -> doSomethingWithResult(result)) //handle result
    .repeat() //resubsribe when onComplete called
    .doOnError(error -> handleError(error)) //handle error
    .retry() //resubscribe when onError called
    .subscribe();

相关内容

  • 没有找到相关文章

最新更新