誤りで観察を止めないでください
-
21-12-2019 - |
質問
これは現在持っているScalaコードです:
val b= observable.interval(1秒).map(n=> if(n%2== 1) NEW以外の例外を投げるN * N)
b scribe(n=> println(n)、e=> println( "error")、()=> PRINTLN( "完了"))
そしてここに私の出力:
0
エラー
各エラーの後に進むだけで、展望できるようにするには、私の観察可能なものを変更することができます、そして、私はこのような出力を持っているでしょう:
0
error
2
error
4
...
. 他のヒント
私はこれと同じ質問をしており、Scala RXのOnErrorFlatMapが存在しないことが失望しました。だから私は突き刺しました この機能を自分で実装しています。
私の解決策を以下に示す(解決策を参照)。キーメソッドはこれです:
def recover[T](target: Observable[T]): Observable[Try[T]] = {
target.map { Success(_) }.
onErrorResumeNext(
(err: Throwable) => Observable.just(Failure(err)) ++ recover(target)
)
}
.
「回復」方法
の詳細「回復」の最初の引数は、後にイベントの絞りを続けたい観察可能です。 例外をスローします。私は他のアプローチのすべての方法を試しました、しかしこれは働いていた唯一のものでした 私。私は最初はScala RXのOnerRerReturnを任意にマッピングして、私の回復によって決定される値に任意のエラーをマッピングしました 関数、そしてそれから続けているが、私は「観察可能契約」の全点を見逃していた。 OnCompletedの後、さらにイベントの送信を停止する必要がある、またはOnError。観察可能な エラーが発生した後にイベントが吹き続けていますが、「病理学」と表示され(そして丁寧社会によって正式に敬遠されています)。 ここで説明したように:ここに興味がある場合は
所属していません StackOverflow