我试图弄清楚如何将可观察对象链接在一起。我有一个现有的方法:public static Observable<Data> getData()
. 在我的另一堂课中,我有这个现有的代码:
doSomeBackgroundWork()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<..>() { ... })
我现在想将getData()
呼叫链接到此呼叫。我该怎么做?我最初尝试过这个:
doSomeBackgroundWork()
.flatMap(s -> call() {
mApi.getData()
}
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<..>() { ... })
但这不起作用,因为 getData() 代码实际上是在主线程上执行的。
即使这样也行不通:
doSomeBackgroundWork()
.concatMap(s -> call() {
mApi.getData()
}
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<..>() { ... })
另外,当我尝试这个时,问题是这zipWith
意味着两个 observables 并行运行,我真的希望一个接一个地运行。
doSomeBackgroundWork()
.zipWith(mApi.getData()),
new Func2<BgWork, DataResponse,DataResponse>() {
@Override
public DataResponse call(BgWork bgWork, DatResponse data) {
return data;
}})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<..>() { ... })