android 多个异步请求,如何通过使用RxJava-Android等待多个嵌套的异步调用?

好的,我想这应该解决你的问题的第一部分:

请注意,对flatMap的第二次调用给定了2个参数 – 有一个flatMap版本,它不仅为每个输入项产生一个Observable,而且还需要一个第二个函数,这个函数又将所得到的Observable中的每个项目与相应的输入项目.

看看这个标题下的第三个图形,以获得直观的理解:

Observable obeservableOfAs = retrofitClient.getListOfAs()

.flatMap(new Func1,Observable>() {

@Override

public Observable call(List listOfAs) {

return Observable.from(listOfAs);

}

)}

.flatMap(new Func1>() {

@Override

public Observable call(A someA) {

return retrofitClient.getTheAaForMyA(someA);

}

},new Func2() {

@Override

public A call(A someA,AA theAaforMyA) {

return someA.set(theAaforMyA);

}

})

...

从这里开始,我仍然不确定你想继续下去:你准备好订阅了由此产生的可观察的?这样你可以处理每个As(onNext)或只是等到所有的完成(onCompleted).

附录:要将所有项目收集到单个列表中,那么可以将您的“可观察”< A>变成可观察的< List< A>>使用toList().

所以你有:

Observable> observableOfListOfAs = observableOfAs.toList();

如果您需要对列表的构建进行更细粒度的控制,您还可以使用reduce.

对于B,只需复制您用于As的整个流程.

然后可以使用zip等待两个流完成:

Observable.zip(

observableOfListOfAs,observableOfListOfBs,new Func2,List,MyPairOfLists>() {

@Override

public MyPairOfLists call(List as,List bs) {

return new MyPairOfLists(as,bs);

}

}

)

.subscribe(new Subscriber() {

// onError() and onCompleted() are omitted here

@Override

public void onNext(MyPairOfLists pair) {

// now both the as and the bs are ready to use:

List as = pair.getAs();

List bs = pair.getBs();

// do something here!

}

});

我想你可以猜测MyPairOfLists的定义.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值