在 Alamofire 中,等待一组调用完成的正确方法是啥?

Posted

技术标签:

【中文标题】在 Alamofire 中,等待一组调用完成的正确方法是啥?【英文标题】:In Alamofire, what is the proper way to wait for a set of calls to complete?在 Alamofire 中,等待一组调用完成的正确方法是什么? 【发布时间】:2015-11-25 16:21:11 【问题描述】:

使用 Alamofire 我需要发出一组服务器请求并等待它们全部成功或失败,然后将结果收集到结果对象中。

在 Alamofire 中是否有适当/提供的方法来执行此操作?

我可以将每个单独的结果放入队列中,然后等到计数 = 请求总数(显然在单独的线程中),但这似乎有点笨拙。

【问题讨论】:

这个问答解决了如何在Objective-C中做到这一点,翻译很简单:***.com/questions/23253175/… 或***.com/a/28101212/1271826 【参考方案1】:

总结一下How to tell if blocks in loop all have completed executing?这个问答,你想创建一个dispatch group,每次操作开始就进组,每次操作完成就退出组,最后用display_group_notify执行一次block该组已完成:

let group = dispatch_group_create()

foreach operation 
    dispatch_group_enter(group)

    startOperation(..., completion:
        dispatch_group_leave(group)
    )


dispatch_group_notify(group, dispatch_get_main_queue()) 
    // code to run when all operations complete

【讨论】:

我正在这样做,但是 dispatch_group_leave() 在第一次被调用时就崩溃了。此代码位于类实例中的函数中,该函数存储在静态变量中(测试代码不是真正的应用程序),因此实例不会释放。 “操作”是 Alamofire 请求,完成返回结果。完成显然是在主线程中运行的,我猜这会导致崩溃或可能存在其他问题?该组是一个实例变量。 没有一些实际代码和错误指示就没有线索。 啊,没关系,愚蠢的错误。答案正确。我未能正确平衡进入和离开。 好了 :) 还要记住,如果有单独的错误和成功回调,您需要在两者中都放一个假。

以上是关于在 Alamofire 中,等待一组调用完成的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

等待多个 Alamofire 请求完成

AlamoFire downloadProgress 完成处理程序到异步/等待

强制 Alamofire 在主线程上做所有事情?

在继续之前等待一个功能完成的正确方法?

如何使用 Alamofire 等待 API 响应 [重复]

ios - 如何使用 Alamofire 等待 api 响应