URLSession 在回退时使用内部回调重试连接
URLSession retry connection on fallback with inner callback
我制作了一个进行网络调用的函数,但我想通过在回退状态下重试网络调用来更有效地完成它。
func dataTaskFunction(completionHandler: @escaping (Bool) -> ()) {
var tryCount: Int = 0
innerDataTask(url) { (data, error) in
tryCount += 1
guard error == nil else {
completionHandler(false)
// retry network call until 3
if tryCount < 3 {
// make innerDataTask again..
}
return
}
completionHandler(true)
}
}
函数处理数据任务,它们completionHandler
两者都有。当我尝试再次重试数据任务时,它似乎是一个调用中的内部调用,我想了解如何在没有像瀑布一样的回调地狱的情况下做到这一点?
基本上你可以递归调用dataTaskFunction
。计数器变量必须在函数外声明
var tryCount = 0
func dataTaskFunction(completionHandler: @escaping (Bool) -> ()) {
innerDataTask(url) { (data, error) in
tryCount += 1
guard error == nil else {
// retry network call until 3
if tryCount < 3 {
self.dataTaskFunction(completionHandler: completionHandler)
} else {
completionHandler(false)
}
return
}
completionHandler(true)
}
}
我制作了一个进行网络调用的函数,但我想通过在回退状态下重试网络调用来更有效地完成它。
func dataTaskFunction(completionHandler: @escaping (Bool) -> ()) {
var tryCount: Int = 0
innerDataTask(url) { (data, error) in
tryCount += 1
guard error == nil else {
completionHandler(false)
// retry network call until 3
if tryCount < 3 {
// make innerDataTask again..
}
return
}
completionHandler(true)
}
}
函数处理数据任务,它们completionHandler
两者都有。当我尝试再次重试数据任务时,它似乎是一个调用中的内部调用,我想了解如何在没有像瀑布一样的回调地狱的情况下做到这一点?
基本上你可以递归调用dataTaskFunction
。计数器变量必须在函数外声明
var tryCount = 0
func dataTaskFunction(completionHandler: @escaping (Bool) -> ()) {
innerDataTask(url) { (data, error) in
tryCount += 1
guard error == nil else {
// retry network call until 3
if tryCount < 3 {
self.dataTaskFunction(completionHandler: completionHandler)
} else {
completionHandler(false)
}
return
}
completionHandler(true)
}
}