インターバル演算子を使用していますが、私のパイプラインで例外が発生しても項目を放し続けたいと思います。間隔はonErrorResumeNextの後に続きます
したがって、私はonErrorResumeNext
Exceptionの場合にアイテムを放出しようとします。しかし、私はこのアイテムを放出した後、間隔がより多くのアイテムを放出するのを見た。
ここで私のユニットテスト。
@Test
public void testIntervalObservableWithError() {
Subscription subscription = Observable.interval(50, TimeUnit.MILLISECONDS)
.map(time -> "item\n")
.map(item -> item = null)
.map(String::toString)
.onErrorResumeNext(t-> Observable.just("item with error emitted"))
.subscribe(System.out::print, t->{
System.out.println(t);
}
);
TestSubscriber testSubscriber = new TestSubscriber((Observer) subscription);
testSubscriber.awaitTerminalEvent(20000, TimeUnit.MILLISECONDS);
}
- 私onErrorResumeNext
SOLUTIONからアイテムを受け取るit's場合は、この動作を、なぜ、観察退会と混同:いくつかの説明の後
が、私はそのときにエラー実現観察可能なtが完了します。だから私は別のobservableに例外を持つことができるobservableをラップしてしまい、私はflatMapを使っています。それで主Observableはアイテムを放出し続けます。
@Test
public void testIntervalObservableWithError() {
Observable.interval(100, TimeUnit.MILLISECONDS)
.map(time -> "item\n")
.flatMap(item -> Observable.just(item)
.map(String::toString))
.subscribe(System.out::print);
TestSubscriber testSubscriber = new TestSubscriber();
testSubscriber.awaitTerminalEvent(5000, TimeUnit.MILLISECONDS);
}
私が知りたいと思うすべての魔法をやり遂げることができる演算子があれば。
Regrads
こんにちは、私のコード例をお読みください。私はonErrorResumeNextを使用しており、動作していません。 – paul
私は最初あなたのコードを読んだ。あなたのケースでは 'null'アイテムで' .map(String :: toString) 'を呼び出すので、ストリームはすぐにエラーで終わり、このエラーは' onResumeErrorNext() 'によって捕捉されます。項目を送出し、ストリームは 'onComplete'を呼び出します。それはあなたの質問への答えです**なぜ観測可能な退会ですか?**。また、私は私の答えを更新しました。 –
さらに更新されました。 –