根据请求Swift“重试”逻辑
发布时间:2020-12-14 05:27:52 所属栏目:百科 来源:网络整理
导读:所以当我的上传请求失败时,我对如何实现重试逻辑感到有点迷失. 这是我的代码,我想要一些指导如何做到这一点 func startUploading(failure failure: (NSError) - Void,success: () - Void,progress: (Double) - Void) { DDLogDebug("JogUploader: Creating jo
所以当我的上传请求失败时,我对如何实现重试逻辑感到有点迷失.
这是我的代码,我想要一些指导如何做到这一点 func startUploading(failure failure: (NSError) -> Void,success: () -> Void,progress: (Double) -> Void) { DDLogDebug("JogUploader: Creating jog: (self.jog)") API.sharedInstance.createJog(self.jog,failure: { error in failure(error) },success: {_ in success() }) }
这是一个通用解决方案,可以应用于任何没有参数的异步函数,但回调除外.我只通过成功和失败回调来简化逻辑,进步不应该难以添加.
所以,假设你的函数是这样的: func startUploading(success: Void -> Void,failure: NSError -> Void) { DDLogDebug("JogUploader: Creating jog: (self.jog)") API.sharedInstance.createJog(self.jog,failure: { error in failure(error) },success: {_ in success() }) } 匹配它的重试功能如下所示: func retry(numberOfTimes: Int,task: (success: Void -> Void,failure: NSError -> Void) -> Void,success: Void -> Void,failure: NSError -> Void) { task(success: success,failure: { error in // do we have retries left? if yes,call retry again // if not,report error if numberOfTimes > 1 { retry(numberOfTimes - 1,task: task,success: success,failure: failure) } else { failure(error) } }) } 并且可以像这样调用: retry(3,task: startUploading,success: { print("Succeeded") },failure: { err in print("Failed: (err)") }) 如果它一直失败,上面将重试startUploading三次,否则将在第一次成功时停止. 编辑.具有其他参数的函数可以简单地嵌入到闭包中: func updateUsername(username: String,failure: NSError -> Void) { ... } retry(3,{ success,failure in updateUsername(newUsername,success,failure) },success: { print("Updated username") },failure: { print("Failed with error: ($0)") } ) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- menu和ContextMenu的xml写法
- objective-c – 检测UISlider的触摸?
- Oracle结合Mybatis实现取表TOP 10条数据
- ruby-on-rails – Ruby on Rails:如何翻译select标签的选项
- ruby – 在OSX 10.10 Yosemite上安装tiny_tds时出错
- Flex progressBar在同一上传功能页面下多次上传中的使用
- FastJson源码解读
- [Swift]LeetCode229. 求众数 II | Majority Element II
- 百度地图攻略1(Binary XML file line #7: Error inflating
- flash知识点