小编Ori*_*iol的帖子

合并发布者时如何处理错误?

我最近开始使用组合,我正在尝试创建一个返回多个数据源组合的存储库。为此,每个数据源都通过一个非常简单的加载方法加载自己的数据:

func loadData() -> AnyPublisher<DataObject, Error>
Run Code Online (Sandbox Code Playgroud)

要合并我想到使用的数据源combineLatest,因为它将等待数据源完成加载,然后它会发布包含数据的组合集或指示失败的错误:

func loadData() -> AnyPublisher<[DataObject], Error> {
   return dataSource1.loadData()
             .combineLatest(dataSource2.loadData())
             .map { $0.0 + $0.1 }
             .eraseToAnyPublisher()
}
Run Code Online (Sandbox Code Playgroud)

总体而言,它的行为似乎没问题,我可以调用repository.loadData()并获得一个包含这两个项目的数据的数组。但是,如果任何数据源发生故障,情况就不是这样了。在这种情况下,无论其他数据源是否成功,load 方法都会返回错误。

合并发布者时是否有标准或推荐的方法来收集所有错误?在我的使用上下文中,我希望仅当两个发布者都失败时才能够丢弃错误,但如果只有其中一个发布者失败,则继续执行并成功。

ios swift swiftui combine

1
推荐指数
1
解决办法
1619
查看次数

标签 统计

combine ×1

ios ×1

swift ×1

swiftui ×1