合并2个可观察量并从最先完成的观察中得到输出

时间:2017-03-03 21:53:09

标签: android rx-java

我有一个订阅等待推送通知,另一个正在轮询服务器以获得响应。我想要同时启动两个observable并返回首先完成的数据。在这里使用什么操作员?

2 个答案:

答案 0 :(得分:3)

由于你想要完成第一个数据,你必须把数据放到某个地方,直到你到达终端事件,将每个数据收集到自己的列表中并使用amb选择来源首先发出事件(收集的列表)的信号。然后,您可以将列表展开回单个项目。

Observable<A> source1 = ...
Observable<A> source2 = ...

Observable.amb(source1.toList(), source2.toList())
.flatMapIterable(list -> list)
.subscribe(...);

答案 1 :(得分:0)

您正在寻找的运营商是first。当然,你必须首先合并Observables(使用merge,或者更好 - mergeDelayError,所以如果只有其中一个失败,你仍然会得到第一个用vaild结果完成的)

应该是这样的:

Observable.mergeDelayError(pushObservable, pullObservable)
        .first()
        .subscribe(data->...);