首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Android上使用RxJava (+ retrofit2)执行3个以上的并行http请求

如何在Android上使用RxJava (+ retrofit2)执行3个以上的并行http请求
EN

Stack Overflow用户
提问于 2018-08-18 11:01:11
回答 1查看 457关注 0票数 2

我正在学习如何使用RxJava (io.reactivex.rxjava2:rxandroid:2.0.1) + retrofit2 + kotlin。

一般情况下,如何观察到这一点,甚至学会了如何在Observable.zip的帮助下结合基于所有人的性能的2-3个并行查询的结果,但是如何执行类似的3次以上的并行查询,我无法理解。

可观察类的源代码有一个方法

代码语言:javascript
复制
static <T1, T2, T3, T4, R> Observable <R> zip (),

但它的工作方式不像

代码语言:javascript
复制
static <T1, T2, T3, R> Observable <R> zip ()

在三个可观测输入和Function3 <*, *, *, *>.的情况下

我已经尝试过使用zipflatMap等进行前三个查询,但仍然无法工作。阅读文档和示例无助于转向正确的方向。我查看了Observable.combineLatest,但是得出了这样的结论(可能是错误的),即该方法将返回执行的第一个可观察到的结果。

我想要的:

我有4种返回可观察的方法:

  • this.orderRepository.getStatuses ():可观测的
  • this.orderRepository.getOrders ():可观测的
  • this.userRepository.getUsers ():可观测的
  • this.orderRepository.getTypes ():可观测的

提示符,请,我应该如何组合这些方法,使它们并行运行,并最终在一个地方获得所有4个方法的结果?

它已经搞砸了,但我通常不明白我应该如何处理这4个可观察到的,以便它们都在一个地方,然后返回到UI。已经和flatMap,地图等混淆了.

请原谅我的错误

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-18 11:21:30

您需要的是zip,可能您遇到的问题是,zip只在所有可观察到的发出时才会发出。

如果您需要在得到更新后立即收到更新,我认为最好的方法是将答案映射到一个常见类型,例如:

代码语言:javascript
复制
class Response(val statuses: Statuses? = null, val orders: Orders? = null, val users: Users? = null, val types: Types? = null)

this.orderRepository.getStatuses().map(Response(statuses = it))

在对所有可观察到的对象执行此操作之后,您将能够使用concatmerge,后者将在任何可观察的发射时立即发出。

更多信息:

CombiningSequences.html

http://reactivex.io/documentation/operators/concat.html

https://code.i-harness.com/en/q/1bddcd2

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51907892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档