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)
   }  
}