android - 使用 RX Android 进行并行 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")
}
)
}
解决方案
如果我按顺序调用单个方法内的两个端点,它是否被认为是在两个不同线程上执行的并行调用。如果不是,我如何使用 RX 使这些 API 调用并行?
它们是平行的。您正在订阅 IO 调度程序上的 observable,而不是阻塞等待响应。
或者一种在并行获取数据的同时获得响应的方法。例如,第一个端点可能需要 5 秒,而第二个端点可能需要 7 秒,但结束响应将在 7 秒后可用。
一种方法是使用zip()
将您的可观察对象组合到单个可观察对象,该可观察对象在所有源都发出时发出。
推荐阅读
- shell - 在 CentOS 6.10 上无法连接到 Daemon Deluge
- asp.net-mvc-5 - 为一个字段工作而不是另一个字段的预输入
- javascript - Object.prototypes builtins 直接规则
- apache-kafka-streams - Kafka Streams - java 版本依赖
- php - 刷新PC后Laravel存储链接不起作用
- perl - 在 macOS Mojave 下安装 DBD::mysql 时遇到问题
- project-reactor - 流是否由项目反应器中的多个线程处理?
- amazon-sqs - Amazon SQS:单个请求中可以删除的最大消息数
- command-line - 更新表时命令“bq update”给了我“意外的关键字参数”错误
- python - 如何扫描数组中与查询词具有最长共享前缀的元素?