【问题标题】:how to write nested network request use rxjava + retrofit2如何使用 rxjava + retrofit2 编写嵌套网络请求
【发布时间】:2016-03-29 02:47:50
【问题描述】:
我在我的项目中使用的是 Rxjava 和 Retrofit2.0,它看起来像这样:
Observable<List<A>> getAFromServer();
Observable<List<B>> getBFromServer(@Body A.a);
如果我不使用响应式的方式,它会是这样的:
List<A> listA = getAFromServer();
foreach(A a: listA){
getBFromServer(a.a)
}
那么,我的问题是如何使用 Rxjava 来实现这一点以及使用什么运算符?
【问题讨论】:
标签:
android
rx-java
retrofit2
【解决方案1】:
有了 Rx,你终于可以不再考虑“嵌套”网络请求了。
如果你仔细想想,你从来没有真正想要“嵌套”网络请求,对吧?这只是代码最终的样子,因为您只有 AsyncTasks 或其他回调可供您使用。
使用 Rx,您最终可以编写结构类似于您实际想要的代码,即链式网络请求:首先做一件事,然后 做另一个。
getAFromServer()
.flatMap(new Func1<List<A>, Observable<A>>() {
@Override
public Observable<A> call(List<A> list) {
// the first flatMap is just a trick to "flatten" the Observable
return Observable.from(list);
}
})
.flatMap(new Func1<A, Observable<B>>() {
@Override
public Observable<A> call(A someA) {
return getBFromServer(someA.a);
}
})
.subscribe(...);