【发布时间】:2021-04-28 00:24:45
【问题描述】:
我有两个签名相同的方法func getItems() -> AnyPublisher<[Item], AppError>。
第一个是从存储中获取项目,第二个是从 Internet 获取。
如何将这样的逻辑添加到具有相同返回类型的第三个方法中,如果第一个方法成功完成我返回storage.getItems(),否则我返回network.getItems()?
【问题讨论】:
我有两个签名相同的方法func getItems() -> AnyPublisher<[Item], AppError>。
第一个是从存储中获取项目,第二个是从 Internet 获取。
如何将这样的逻辑添加到具有相同返回类型的第三个方法中,如果第一个方法成功完成我返回storage.getItems(),否则我返回network.getItems()?
【问题讨论】:
如果在项目不存在时从storage.getItems() 返回的发布者出错,那么您可以“捕获”错误并改为发出新的发布者:
func getItems() -> AnyPublisher<[Item], AppError> {
storage.getItems()
.catch { err in
// check the err, if you need to
network.getItems()
}
.eraseToAnyPublisher()
}
【讨论】:
flatMap 的技术。