我有两个单打定义如下。
Single<User> userSingleA = Single
.fromCallable(()-> {
// Function fetching user data from mirror A
return user;
});
Single<User> userSingleB = Single
.fromCallable(()-> {
// Function fetching user data from mirror B
return user;
});
两者都表示用于获取用户对象的HTTP GET请求。唯一的区别是他们正在与两个不同的镜像服务器通信。我想以某种方式组合两个单曲,使得最终单个将具有返回的用户对象,其中镜像是最快的。一旦其中一个传递并忽略另一个,它就应该取值。
Single<User> userSingle = takeFirstResponse(userSingleA, userSingleB);
甚至可以使用RxJava执行此操作吗?如果是,那怎么样?
答案 0 :(得分:2)
您可以使用的运算符为amb
。
给定两个或多个源Observable,仅从第一个Observable中发出所有项目以发出项目或通知
Single<User> userSingle = Single.amb(userSingleA, userSingleB);
注意: Single.amb()
仅适用于rx-java2,对于rx-java,您必须将源单曲转换为可观察数据
Single<User> userSingle = Observable.amb(userSingleA.toObservable(), userSingleB.toObservable)
.toSingle()
或使用合并
Single<User> userSingle = Single.merge(userSingleA, userSingleB)
.first()
.toSingle()