【发布时间】:2023-02-03 17:08:28
【问题描述】:
我需要在设备未连接到互联网时进行无限加载
示例:如果用户在应用程序执行请求时失去互联网连接,则应用程序必须等待互联网连接恢复并再次尝试执行请求
我用完成来做
func getData(completion: ((SomeData?) -> Void)?) {
apiService.getSomeData() { [weak self] result in
switch result {
case .success(let data):
return data
case .failure(let error):
switch error {
case .networkError:
let getDataTask: () -> Void = {
self?.getData()
}
if self?.isConnectedToTheInternet == true {
DispatchQueue.global().asyncAfter(
deadline: .now() + requestRepeatDelay,
execute: getDataTask
)
} else {
// when internet connection will be restore then execute all tasks from onConnectionToTheInternetRestoredTasks
self?.onConnectionToTheInternetRestoredTasks.append(getDataTask)
}
default:
throw error
}
}
}
}
但现在我需要在 async/await 中重构它
func getData() async throws -> SomeData {
let result = await apiService.getSomeData()
switch result {
case .success(let data):
return data
case .failure(let error):
switch error {
case .networkError:
// need to do wating for restore and try again
default:
throw error
}
}
}
我不知道如何在getData() async throws中处理.networkError以等待恢复连接
你能给我解释一下吗?
【问题讨论】:
标签: swift async-await