我有一个PublishSubject<String>
从ID发出Article
:
private final PublishSubject<String> inputArticle = PublishSubject.create();
public Observable<Article> getArticle() {
return inputArticle.flatMap(getArticleById());
}
private Func1<String, Observable<Article>> getArticleById() {
return new Func1<String, Observable<Article>>() {
@Override
public Observable<Article> call(String articleId) {
return dataModel.getArticleById(articleId);
}
};
}
在另一个地方,我发出如下值:
inputArticle.onNext("1234");
如果我发出与任何文章不匹配的文章ID,dataModel.getArticleById(id)
会发出错误,就可以了。但我想在错误发生后继续发光。
我正在Android中实现MVVM。我的观点必然是public Observable<Article> getArticle()
。当用户输入文章ID时,会调用inputArticle.onNext(inputArticleId);
。所以,很可能id不存在。
答案 0 :(得分:2)
onErrorResumeNext
可以在这里工作,尝试这样的事情:
public Observable<Article> getArticle() {
return inputArticle
.flatMap(getArticleById())
.onErrorResumeNext(new Func1<Throwable, Observable<? extends Article>>() {
@Override
public Observable<? extends Article> call(Throwable throwable) {
// return either null or some Article object that indicates invalidity
return Observable.just(null);
}
});
}
详细了解错误处理操作符here。