2016-12-13 11 views
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 
    } 

この状況を処理するにはどうすればよいでしょうか?

+1

あなたは 'repeat'演算子を試したのですか? –

+0

最後に観察可能な状態に再登録しませんか?すなわち、開始の代わりにawaitSecondEventに再サブスクライブすることになります。 –

+0

'repeat'は上流全体にresubsribesします。 –

答えて

0

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

0

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

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

awaitStartEvent() 
    .switchMap(value -> awaitSecondEvent(value)) 
    .doOnNext(result -> { doSomethingWithResult(result); }) 
    .doOnError(error -> { handleError(error); }) 
    .repeat() 
    .retry() 
    .subscribe(); 
0
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(); 
関連する問題