发出错误后如何发出更多值?

时间:2016-10-24 11:37:57

标签: rx-java

我有一个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不存在。

1 个答案:

答案 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