【问题标题】:Unexpected return value error in RxJava2RxJava2 中的意外返回值错误
【发布时间】:2018-12-28 04:29:42
【问题描述】:

需要帮助来解决 RxJava 中的返回值问题。所以,这是我到目前为止所做的:

private Observable<Boolean> updatedMenuItems() {
    return Observable.fromIterable(getAliases())
        .doOnNext(alias -> {
            return ApiRepository.getMenuItemBlocks(alias)
                    .subscribeOn(Schedulers.io())
                    .flatMapIterable(list -> list)
                    .map(item -> item.getFileTimeStamp() == null ? "" : item.getFileTimeStamp().toString())
                    .toList()
                    .doOnSuccess(apiContents -> {
                        return Observable.fromCallable(DataStoreRepository::loadMenuItemsBlock)
                                .subscribeOn(Schedulers.io())
                                .flatMapIterable(list -> list)
                                .map(item -> item.fileTimeStamp == null ? "" : item.fileTimeStamp.toString())
                                .toList()
                                .map(dbContents -> {
                                    return DBUtil.isContentEqual(dbContents, apiContents);
                                });
                    });

        });
}

我需要从此方法返回Observable&lt;Boolean&gt; 数据类型,但在.doOnSuccess(...); 块内我收到有关返回值的错误。请你帮我解决这个问题。谢谢!

【问题讨论】:

  • doOnNextdoOnSuccess 只观察链(应该仅用于副作用),它具有 Consumer 参数,返回类型为 void

标签: rx-java2


【解决方案1】:

doOnNext、doOnSuccess、doOnError、doOnCompleted

这些被称为副作用运算符,无论如何它们不会真正影响链,它们可能被用作 ex 的日志记录机制。

您正在寻找的可能是 flatMap,来自文档:

FlatMap:将 Observable 发射的项目转换为 Observable,然后将这些项目的发射扁平化为单个 Observable。

【讨论】:

  • onNext, onSuccess, onError, onCompleted - 这些是订阅者事件。在这种情况下,我认为您想在这些前面加上“do”
  • 感谢您的帮助,仍在寻找返回值问题的解决方案
  • @MarkKeen 是的,你是对的!,将对其进行编辑。 surik 我刚刚告诉过你,使用 flatMap
猜你喜欢
  • 2015-08-23
  • 1970-01-01
  • 2021-07-29
  • 2015-05-09
  • 2016-08-10
  • 2022-11-21
  • 2019-09-10
  • 1970-01-01
  • 2020-06-24
相关资源
最近更新 更多