質問

これは現在持っている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
...
.

役に立ちましたか?

解決

さまざまなエラーハンドラのいずれかを使用できます。 私はあなたの場合でもonerrorflatmapが正しい選択かもしれません:

Wiki

javadoc

残念ながら、OnErrorFlatMapは(バージョン0.19.0以降)Scala APIの一部です。

他のヒント

私はこれと同じ質問をしており、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。観察可能な エラーが発生した後にイベントが吹き続けていますが、「病理学」と表示され(そして丁寧社会によって正式に敬遠されています)。 ここで説明したように:ここに興味がある場合は

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top