当前位置: 首页 > 面试题库 >

有没有办法通过重试来执行Alamofire请求

傅茂实
2023-03-14
问题内容

我在代码中有很多地方可以处理Alamofire请求/响应。

由于某些间歇性问题(最常见的是不稳定的网络),每个请求都可能失败。

我希望能够在重试前重试请求3次。

直接的方法是拥有类似的东西

var errorCount = 0
func requestType1() {
   let request = Alamofire.request(...).responseJSON { response in
       if (isError(response) && errorCount < 3) {
          errorCount += 1
          request1()
       } 
       if (isError(response)) {
          handleError()
       }

       handleSuccess()
   }
}

但是,出于多种原因,我不喜欢这种方法。最明显的是,我将需要为每种请求类型实现这样的代码(并且我有15种这样的代码)。

我很想知道是否有办法做类似的事情(变化很小且非侵入性)

let request = Alamofire.request(..., **3**)

问题答案:

通过Swift获得的语法糖之一就是可以使用以下代码:

public func updateEvents(someNormalParam: Bool = true, someBlock: (Void->Void))

像这样:

updateEvents(someNormalParam: false) {...}

请注意,该块位于updateEvents函数的()外部,与您通常期望的相反。仅当块是函数声明中的最后一个东西时,它才起作用。

这意味着,如果碰巧遇到了诸如Alamofire请求之类的阻止,则可以使用重试功能有效地包装它。一个稍微复杂的问题是您想在块内调用一个块。没什么大不了的:

func retryWrapper(alamoBlock: (Void->Request)) {
   alamoblock().responseJSON() {
       //Your retry logic here
   }
}

您可以像这样使用它:

retryWrapper() {
    Alamofire.request(method, targetUrl, parameters: parameters, encoding: encoding)
}

这意味着您要做的就是找到您的Alamofire调用,并将其包装在{}中,然后将retryWrapper()放在前面。重试逻辑本身仅存在一次。



 类似资料:
  • 问题内容: 有没有办法在Go中执行重复的后台任务?我在想类似Java 的东西。我知道我可以使用goroutine和来做到这一点,但是我想要一些容易停止的东西。 这就是我得到的,但是对我来说看起来很丑。有没有更清洁/更好的方法? 问题答案: 该功能使通道发送定期消息,并提供了一种停止该消息的方法。使用它像这样(未经测试): 您可以通过关闭频道来停止工作人员:。

  • 我解释我这篇文章的目标。 实际上,我想重写如何Android工作的基本上,与应用程序中的字符串。此时此刻,我可以从重写android资源中动态更改它 实际上,我有这个功能,只有当我使用时才能正常工作: 有一种简单的方法,不需要太多代码,就可以覆盖xml中的行为?

  • 我知道在php脚本中: 将遵循重定向。有没有办法用命令行curl来跟踪重定向?

  • 下面是我使用的命令,通过添加配置文件来运行Spring启动应用程序,但我无法从eclipse/st在调试模式下运行Spring启动应用程序,是否有任何方法可以在st/eclipse中指定配置文件并在调试模式下运行应用程序? 运行-Dspring-boot.run.profiles=种子,创建,Dev1,dbH2: from命令提示符 我使用的是eclipse/sts项目- Spring Boot:

  • 问题内容: 即时消息插件可以接收IM消息,例如“ 在10秒钟内构建XYZ”,并将作业设置为在10秒内运行。它通过Java API来调度Job [0]。 我想知道是否可以通过REST API [1] 传递一些魔术参数,使我能够以相同的方式“延迟”作业? 谢谢。 [0] - https://github.com/jenkinsci/instant-messaging- plugin/blob/mast

  • 问题内容: 有没有办法从Amazon Redshift执行SQL转储? 您可以使用SQL Workbench / J客户端吗? 问题答案: 我们当前正在Redshift上成功使用Workbench / J。 关于转储,尽管始终可以通过查询来提取数据,但在Redshift中目前没有可用的模式导出工具(pg_dump不起作用)。 希望对您有所帮助。 编辑: 请记住,诸如排序和分配键之类的内容不会反映在