7

Observable が破棄されないように、REactiveX のサブスクライバーにエラーを伝達する方法が不明です。

observable.onNext(1);
observable.onNext(2);
observable.onError("Nope");
observable.onNext(3);<<won't work.

この制限をそのまま受け入れますが、ダウンストリームのリスナーにエラーが発生したことを知らせ、オブザーバブルを死なせたくないというシナリオがまだあります。

これの主な使用例は、エラーが発生した場合に、以前に登録したすべてのオブザーバブルに対して「セットアップ」を呼び出す必要がないようにする UI コードです。

可能な代替手段は次のとおりです。

a) データ フィールドとエラー フィールドを持つカスタム オブジェクトをプッシュする

class Data
{
    int value;
    Error * error;  
}

私はこの解決策が好きではありません

b) 2 つのストリームを持つ。1 つはデータ用、もう 1 つはエラー用です。

observable.onNext(1);
observable.onNext(2);
errorObservable.onNext("Error");
observable.onNext(3);

これに対する一般的なベストプラクティスは何ですか?

4

2 に答える 2

2

私は間違いなくオプションA)を使用します-データおよび/またはエラーの両方を運ぶことができるオブジェクトを作成します。データと起こり得るエラーをそのオブジェクトにどのようにラップするかは問題ではありませんが、onNext()イベントとして両方を 1 つのストリームを介して送信することは、サブスクライバーにすべての情報とそれを処理するすべての自由を与える適切なソリューションです。

B) オプションは、より複雑な非同期シナリオで実装するのが非常に難しい可能性があり、おそらく多くの s の使用につながる可能性があり、Subjectこれも悪いことです。

于 2016-08-16T21:01:03.677 に答える
0

retry() をソース オブザーバブルに追加するだけの場合、サブスクライバーは再サブスクライブする必要はありません。

于 2016-10-28T19:54:27.723 に答える