如何将 AnyPublisher return 类型的两个方法调用解析为一个?

How to resolve two method calls with AnyPublisher return type into one?

我有两个签名相同的方法func getItems() -> AnyPublisher<[Item], AppError>。 第一个是从存储中获取项目,第二个是从 Internet 中获取项目。

如何将这样的逻辑添加到具有相同 return 类型的第三个方法,如果第一个方法成功完成我 return storage.getItems(),如果没有我 return network.getItems()?

如果从 storage.getItems() 返回的发布者在项目不存在时出错,那么您可以“捕获”错误并改为发出新的发布者:

func getItems() -> AnyPublisher<[Item], AppError> {
   storage.getItems()
       .catch { err in
            // check the err, if you need to
            network.getItems()
       }
       .eraseToAnyPublisher()
}