【问题标题】:How can I emit more values after emit an error?发出错误后如何发出更多值?
【发布时间】:2016-10-25 04:36:47
【问题描述】:

我有一个 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&lt;Article&gt; getArticle()。当用户输入文章 id 时,inputArticle.onNext(inputArticleId); 被调用。所以,很可能id不存在。

【问题讨论】:

    标签: rx-java


    【解决方案1】:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-14
      • 1970-01-01
      • 1970-01-01
      • 2021-09-15
      相关资源
      最近更新 更多