我需要发出大约 5 个链接请求,例如我有 5 个不同的调用,我想让它们按特定顺序串行而不是并行。
这里有一些我的可观察对象的例子
Observable<ResponseBody> textsCall=EndpointFactory.provideEndpoint().getTexts(textsTask.getLanguage())
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
Observable<AirportCombo> routesCall=EndpointFactory.provideEndpoint().getRoutes()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
其实我也不知道rx java上有什么功能。
之前我实现了并行请求,现在我需要串行。
如果您在这里需要并行方法,您是:
Observable<ResponseResult> combined = Observable.zip(textsCall, routesCall, (textsBody, airportCombo) -> {
//some parsing and other logic
return new ResponseResult(flag);
});
您可以使用 flatmap 函数来达到这个目的
textsCall
.flatMap(new Func1 < ResponseBody, Observable < AirportCombo >> () {
@Override
public Observable < AirportCombo > call(ResponseBody valueA) {
// code to save data from service valueA to db
// call service B
return routesCall;
}
})
.flatMap(new Func1 < AirportCombo, Observable < ValueC >> () {
@Override
public Observable < ValueC > call(AirportCombo valueB) {
// code to save data from service valueB to db
// call service C
return observableC;
}
})
.flatMap(new Func1 < ValueC, Observable < ValueD >> () {
@Override
public Observable < ValueD > call(ValueC valueC) {
// code to save data from service valueC to db
// call service D
return observableD;
}
})
.flatMap(new Func1 < ValueD, Observable < ValueFinal >> () {
@Override
public Observable < ValueFinal > call(ValueD valueC) {
// code to save data from service valueD to db
// call Final Service
return observableFinal;
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber < ValueFinal > () {
@Override
public void onCompleted() {}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(ValueFinal fooB) {
// code to save data from service ValueFinal to db
}
});