首页 > 解决方案 > 使用 RX And​​roid 进行并行 API 调用

问题描述

我有两个不同的端点用于为用户获取数据。我正在对 RX 适配器工厂进行改造。如果我按顺序调用单个方法内的两个端点,它是否被认为是在两个不同线程上执行的并行调用。如果不是,我如何使用 RX 使这些 API 调用并行?或者一种在并行获取数据的同时获得响应的方法。例如,第一个端点可能需要 5 秒,而第二个端点可能需要 7 秒,但结束响应将在 7 秒后可用。

fun fetchData() {
    api.getData()
        .subscribeOn(Schedulers.io())
        .subscribe(
            { profileResponse ->
                //ProfileResponse Object
                Timber.d("profileResponse: $profileResponse")
                //store response for later use
                Cache.save("key", profileResponse.toString())
            },
            {
                Timber.e("error")
            }
        )


    api2.getData()
        .subscribeOn(Schedulers.io())
        .subscribe(
            { profileDetails ->
                //profileDetails Object
                Timber.d("profileDetails: $profileDetails")
            },
            {
                Timber.e("error")
            }
        )
}

标签: androidkotlinretrofitrx-java2

解决方案


如果我按顺序调用单个方法内的两个端点,它是否被认为是在两个不同线程上执行的并行调用。如果不是,我如何使用 RX 使这些 API 调用并行?

它们是平行的。您正在订阅 IO 调度程序上的 observable,而不是阻塞等待响应。

或者一种在并行获取数据的同时获得响应的方法。例如,第一个端点可能需要 5 秒,而第二个端点可能需要 7 秒,但结束响应将在 7 秒后可用。

一种方法是使用zip()将您的可观察对象组合到单个可观察对象,该可观察对象在所有源都发出时发出。


推荐阅读