2017-12-15 3 views
0

エラー処理に関するリアクタのリファレンスドキュメントを読んでいて、何かが間違っているようです。たとえば、このセクションでは、およそfallback methodプロジェクトのリアクタ:エラー処理に関する誤解を招く恐れのある文書

Flux.just("key1", "key2") 
    .flatMap(k -> callExternalService(k)) 
    .onErrorResume(e -> getFromCache(k)); 

しかしonErrorResume()ラムダは、一つのパラメータのみe(スロー可能なエラー)をとります。どのようにk(以前の値がフラックスによって放出されたか)はここで参照されていますか?

他の類似したコードスニペットがドキュメントにあります。私はこれを間違って読んでいる? ドキュメントが本当に間違っている場合は、どうすればこのケースを実際に処理できますか?以前の値で代替パスを実行してエラーから回復しますか?

答えて

2

はい、ドキュメントにバグが見つかりました。

あなたはonErrorResumekに電話を使用したい場合はそのようなflatMapに引数の内部で起こる必要があります:あなたのコメントについて

Flux.just("key1", "key2") 
    .flatMap(k -> callExternalService(k) 
      .onErrorResume(e -> getFromCache(k)) 
    ); 

onErrorXXXの一部として処理されている値を持ってすることはできませんなぜなら、値が処理されている間は問題のエラーが起きていない可能性があるからです。おそらく、背圧(すなわち、より多くの要素を要求する)を処理している間または購読している間に起こった可能性がある。

+0

ありがとう@Jens。しかし、onErrorResume()とonErrorReturn()メソッドの例外と以前の値の両方にアクセスできるのは良いことです。 – user882209

+1

は、エラーメッセージに現在の値を設定できない理由を説明する回答を更新しました。 –

関連する問題