【发布时间】:2022-06-15 16:11:58
【问题描述】:
我有一个调用 API 请求的应用程序。一些用户遇到了一个错误,即应用程序在获取数据时关闭应用程序时抛出超时错误,然后再打开它。
我正在使用标准 URLSession 数据任务,如下例所示:
var session = URLSession(configuration: .ephemeral, delegate: self, delegateQueue: queue)
private func loadModels -> AnyPublisher<[Model], LoadModelsUseCaseError> {
guard let keyID = keyAdapter.getKeyID() else {
return Fail<[Model], LoadModelsUseCaseError>(error: .keyIDNotFound).eraseToAnyPublisher()
}
let url = Environment.loadModelsURL(for: keyID)
return apiAdapter.session
.dataTaskPublisher(for: url)
.decode(type: [Model].self, decoder: decoder)
.mapError(LoadModelsUseCaseError.init)
.eraseToAnyPublisher()
}
一种解决方法是在我从中调用该方法的视图模型中调用.retry(1),但该解决方案存在明显缺陷。
另一种解决方法是捕获超时错误并再次调用加载方法。这也不完美,因为请求永远不会超时(即使在其相关情况下)。
任何建议如何处理这种情况?非常感谢
【问题讨论】:
标签: ios swift urlsession background-task