你需要的是
FLATMAP
参考最初的可观察问题示例,代码可能如下所示(假设lamda语法与Java 8/RetroLambda中的语法相同):
categoriesObservable.flatMap(categoryHomeModel -> {
/* Work on categoryHomeModel result; you can use it to configure next request */
return walletObservable.flatMap(walletBalance -> {
/* Work on walletBalance result; you can use it to configure next request */
return settingsObservable.flatMap(settings -> {
/* Work on settings result; you can use it to configure next request */
return ratingsObservable;
});
});
}).subscribe(swapSettings -> { /* Work on swapSettings; sequence is done */ });
这将确保您的请求按顺序执行。即使使用CONCAT,结果也将按顺序发送给订阅服务器,但是
实际请求可以并行启动
,这有时是预料不到的。如果您有真正独立的请求(例如查询不同类型的数据),那么CONCAT/ZIP是一个不错的选择,如果实际HTTP请求的顺序无关紧要,那么并行运行请求是可以的(甚至是可取的)。