シナリオ:複数の異なるバックエンドシステムをクエリするために使用するcustomerID文字列があります。カレンダー、ヘルプデスク、ERP、CRMなどです。単一のレポートをコンパイルします。 は、だから私は(psydocode)おおよそ持っている:複数の観測可能な要素が返されるのを待つ
Result myResult = new Result();
Observable<Cal> cal = Calbackend.get(customerid);
cal.subscribe(calentry -> myResult.addCal(calentry));
Observable<Erp> erp = ERPbackend.get(customerid);
erp.subscribe(erpentry -> myResult.addErp(erpentry));
Observable<Help> help = Helpbackend.get(customerid);
help.subscribe(helpentry -> myResult.addHelp(helpentry));
Observable<Crm> crm = CRMbackend.get(customerid);
crm.subscribe(crmentry -> myResult.addCrm(crmentry));
// Magic here?
return result;
私が考えていたアプローチ:開始を防止し、その後、さらにそれぞれのcount()
を購読するdefer()
を使用します。それで、それぞれが単一のアイテムを出すだけなので(他のイベントは異なる数のイベントを持ちます)、カウント要素をZIPすることができます。ただし、myResult.add
がcount()
より遅い場合は、データが失われる可能性があります。
私が考えていたもう1つのオプションは、各サブスクリプションに対してブール値フラグの配列を設定し、すべての完了(およびエラー)イベントをチェックしてコールバックを実行するか、
私は一見がhereとhereでしたが、その例は定数またはデータ型を扱っています。
もっと良い/お勧めの方法がありますか?
あなたはこれらの観測から、複数の排出を期待していますか?もしそうであれば、 'toList'演算子を使うことができます。演算子は、Observableソースが完了したときに、出力されたすべての項目をリストにコンパイルして出力します。その後、4つのオブザーバブルリストをまとめてまとめ、結果を構成することができます。 – ehehhh
はい。各観測対象には未知数の排出量があります。番号は関連していません。 toList演算子は挿入順序を保持するリストを返しますか?あなたのコメントを受諾 – stwissel