如何在 Android 上使用 RxJava (+ retrofit2) 执行 3 个以上的并行 http 请求
How to execute more than 3 parallel http requests using RxJava (+ retrofit2) on Android
我正在尝试学习如何使用 RxJava (io.reactivex.rxjava2:rxandroid:2.0.1
) + retrofit2 + kotlin。
Observable 是如何参与其中的,总的来说,想通了,甚至学会了如何在 Observable.zip
的帮助下,根据所有的性能组合 2-3 个并行查询的结果,但是如何类似地执行超过 3 个我无法理解的并行查询。
Observable 的源代码class 有一个方法
static <T1, T2, T3, T4, R> Observable <R> zip (),
但它不像
那样工作
static <T1, T2, T3, R> Observable <R> zip ()
在三个 Observable 输入的情况下 Function3 <*, *, *, *>.
我已经尝试使用 zip
进行前三个查询,然后使用 flatMap
等等,但它仍然不起作用。阅读文档和示例无助于转向正确的方向。我查看了 Observable.combineLatest
,但得出的结论(可能是错误的)该方法将 return 执行的第一个 Observable 的结果。
我想要的:
我有 4 个 return 可观察的方法:
- this.orderRepository.getStatuses(): 可观察
- this.orderRepository.getOrders(): 可观察
- this.userRepository.getUsers(): 可观察
- this.orderRepository.getTypes(): 可观察
请问,我应该如何组合这些方法,使它们运行并行,最后在一个地方得到所有4个方法的结果?
已经搞砸了,但我一般不明白我应该用4个Observables做什么,让它们都在一个地方return到UI。 + 已经与 flatMap、map 等混淆了...
有误请见谅
您需要的是 zip
,您遇到的问题可能是因为 zip
只会在所有可观察对象都发出时才发出。
如果您需要在收到更新后立即收到更新,我认为您最好的办法是将答案映射到通用类型,例如:
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))
对所有可观察对象执行此操作后,您将能够使用 concat
或 merge
,它们会在任何可观察对象发出时立即发出。
更多信息:
http://www.introtorx.com/uat/content/v1.0.10621.0/12_CombiningSequences.html
我正在尝试学习如何使用 RxJava (io.reactivex.rxjava2:rxandroid:2.0.1
) + retrofit2 + kotlin。
Observable 是如何参与其中的,总的来说,想通了,甚至学会了如何在 Observable.zip
的帮助下,根据所有的性能组合 2-3 个并行查询的结果,但是如何类似地执行超过 3 个我无法理解的并行查询。
Observable 的源代码class 有一个方法
static <T1, T2, T3, T4, R> Observable <R> zip (),
但它不像
那样工作static <T1, T2, T3, R> Observable <R> zip ()
在三个 Observable 输入的情况下 Function3 <*, *, *, *>.
我已经尝试使用 zip
进行前三个查询,然后使用 flatMap
等等,但它仍然不起作用。阅读文档和示例无助于转向正确的方向。我查看了 Observable.combineLatest
,但得出的结论(可能是错误的)该方法将 return 执行的第一个 Observable 的结果。
我想要的:
我有 4 个 return 可观察的方法:
- this.orderRepository.getStatuses(): 可观察
- this.orderRepository.getOrders(): 可观察
- this.userRepository.getUsers(): 可观察
- this.orderRepository.getTypes(): 可观察
请问,我应该如何组合这些方法,使它们运行并行,最后在一个地方得到所有4个方法的结果?
已经搞砸了,但我一般不明白我应该用4个Observables做什么,让它们都在一个地方return到UI。 + 已经与 flatMap、map 等混淆了...
有误请见谅
您需要的是 zip
,您遇到的问题可能是因为 zip
只会在所有可观察对象都发出时才发出。
如果您需要在收到更新后立即收到更新,我认为您最好的办法是将答案映射到通用类型,例如:
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))
对所有可观察对象执行此操作后,您将能够使用 concat
或 merge
,它们会在任何可观察对象发出时立即发出。
更多信息:
http://www.introtorx.com/uat/content/v1.0.10621.0/12_CombiningSequences.html