我正在学习异步等待功能,但遇到了一个涉及feed的备用场景问题。在重构中,viewModel尝试从网络获取feed,如果失败,则使用默认的备用feed。
问题是,我的头脑认为异步等待应该解决嵌套闭包问题,但在备用情况下仍然需要它。
func fetch() async throws -> [Feed]? {
var feed: [Feed]?
do {
feed = try await remoteLoader.load()
} catch {
// Pass error up the chain for handling
do {
feed = try await localLoader.load()
} catch {
// Pass error up the chain for handling
}
}
return feed
}
这是否是备选方案的预期方法?
我想到的另一种方法是首先尝试加载本地文件,如果成功,则用远程文件替换它。
func fetch() async throws -> [Feed]? {
var feed: [Feed]?
do {
feed = try await localLoader.load()
feed = try await remoteLoader.load()
} catch {
throw FeedRepositoryError.FetchFeed(error)
}
return feed
}
catch
块中处理。如果remoteLoader抛出了应该传递给调用者的不同错误,您需要添加第二个catch分支。在这个范围内重新抛出错误。 - vadian