首页 > 解决方案 > 避免在错误代码列表中插入项目

问题描述

所以我有一个使用 RxJava 调用的函数,然后这个函数应该将返回的元素插入到列表中。

所以代码工作正常。我能够检索购物车列表中的所有项目。但是,如果出现由 getItem 生成的错误代码(getItem 进行 API 调用),例如 401 或 404...,我想继续迭代并绕过插入。我不能使用带有 null 的 onErrorReturnItem 并在之后过滤 null 。

  return Observable.just(itemResponses)
      .flatMapIterable { it }
      .flatMapSingle { itemResponse ->
        itemWarehouse.getItem(itemResponse.id)
            .map { item ->
              itemData(
                  itemResponse.id,
                  item,
                  itemResponse.info,
                  false,
                  itemResponse.result)
            }
      }
      .map { itemData -> cartMap[itemData.id]?.insert(itemData) }
      .toList()
      .map { cartMap.values.toList() }
}

任何想法 ?

标签: androidkotlinexceptionrx-java

解决方案


这应该工作

return Observable.just(itemResponses)
      .flatMapIterable { it }
      .flatMap { itemResponse ->
        itemWarehouse.getItem(itemResponse.id)
            .toObservable()
            .map { item ->
              itemData(
                  itemResponse.id,
                  item,
                  itemResponse.info,
                  false,
                  itemResponse.result)
            }
            .onErrorResumeNext(Observable.empty())
      }
      .map { itemData -> cartMap[itemData.id]?.insert(itemData) }
      .toList()
      .map { cartMap.values.toList() }

推荐阅读