RxJava如何获取第一单的价值来完成?

问题描述 投票:1回答:1

我有两个单打定义如下。

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执行此操作?如果是,那怎么样?

rx-java
1个回答
2
投票

你可以使用的运营商是amb

给定两个或多个源Observable,仅从这些Observable中的第一个发出所有项目以发出项目或通知

Single<User> userSingle = Single.amb(userSingleA, userSingleB);

注意:Single.amb()仅适用于,对于,您必须将源单曲转换为可观察量

Single<User> userSingle = Observable.amb(userSingleA.toObservable(), userSingleB.toObservable)
                                    .toSingle()

或使用合并

Single<User> userSingle = Single.merge(userSingleA, userSingleB)
                                .first()
                                .toSingle()
© www.soinside.com 2019 - 2024. All rights reserved.