我有3个返回Observable(String)
的方法。我需要逐个执行这些方法。对于每种方法,需要大约2或3分钟。我正在使用下一个代码:
Observable.concat(one(),two(),three())
.subscribeWith(new DisposableObserver<String>() {
@Override
public void onNext(String s) {
LOG.debug(s);
}
@Override
public void onError(Throwable e) {
LOG.error(e.toString());
}
@Override
public void onComplete() {
}
});
仅执行第一种方法。第二种和第三种方法被忽略。我无法理解这是什么问题?我使用的是RxJava2版本2.1.6
答案 0 :(得分:4)
显然,one()
是Observable
,不发出onComplete()
事件,这意味着它还没有完成,而concat()
运算符将等待,直到observable发出一个终端事件,然后才会从下一个observable开始。
如果您不具备第一个observable的创建逻辑,则可以使用Single.fromObservable()
API将observable转换为Single
。
Observable.concat(Single.fromObservable(one()), two(), three())
如果您确实可以访问第一个observable的创建逻辑,那么发出一个终端事件(即emitter.onComplete()
)。
正如David Karnok在评论部分所述:
Single.fromObservable()
还需要一个完整的来源,因此如果该来源恰好没有项目,它可能会给您带来错误。
答案 1 :(得分:1)
您的第一个观察完成或只发出一个项目吗?根据{{3}},它将不会从一个完成后从两个或三个发出项目。