仅在发出多个请求后调用函数

切萨雷

我正在使用Alamofire使用for-in循环对数组中的每个项目发出HTTP请求得到所有响应后,我想调用一个函数:

for product in products {
    let requestURL = "http://api.com/" + product
    let parameters = ["apiKey" : "myApiKey"]
    Alamofire.request(.GET, requestURL, parameters: parameters)                  
        .responseJSON { response in
             // do stuff here
        }
}

为了在完成后调用函数,我认为可以检查product数组的最后一个元素是否正确,然后再调用该函数(因为请求是异步的)。我该怎么做?

Rafa de King

您应使用GCD在所有请求完成时得到通知。使用dispatch_group_createdispatch_group_notify有关实现的详细信息,请查看此线程

来自链接线程的示例代码:

func downloadAllData(allDataDownloadedCompletionHandler:()->Void) {
    let dispatchGroup: dispatch_group_t = dispatch_group_create()
    let types = ["one", "two", "three"]  // there are actually about 10 requests called, but to make it simple I set it to 3
    for type in types {
        // enter group and run request
        dispatch_group_enter(dispatchGroup)
        self.downloadDataForType(type, group: dispatchGroup)
    }

    dispatch_group_notify(dispatchGroup, dispatch_get_main_queue(), {
        allDataDownloadedCompletionHandler()
    });
}

func downloadDataForType(type:String, group: dispatch_group_t) {
    Alamofire.request(Router.TypeData(type: type)).response({ (request, response, xmlResponse, error) -> Void in
        // request finished
        println("Data for type \(type) downloaded")

        // let's parse response in different queue, because we don't want to hold main UI queue 
        var db_queue = dispatch_queue_create("db_queue", nil)
            dispatch_async(db_queue, {
            if response?.statusCode == 200 {
               saveToDatabase(xmlResponse)
           }

            // leave group
            dispatch_group_leave(group)
        })
    })
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

仅在Angular中发出$ http请求后,才能运行javascript函数?

来自分类Dev

https 请求在循环中,在发出最后一个请求后调用函数节点

来自分类Dev

如何仅在所有请求完成后调用函数?

来自分类Dev

在Python上发出发布请求时,如何调用函数?

来自分类Dev

从发出api请求的函数调用中获取响应或错误

来自分类Dev

Javascript onclick函数仅在异步请求后才能工作。

来自分类Dev

$ http仅在发出简单的ajax请求时才调用错误?

来自分类Dev

仅在触发了多个其他事件之后,如何使用RxJS和Observables发出http请求?

来自分类Dev

仅在setState完成后返回调用者函数

来自分类Dev

仅在解析模板后才调用链接器函数

来自分类Dev

仅在中间件完成其任务后调用函数

来自分类Dev

如何调用通过请求后调用的python flask函数?

来自分类Dev

如何仅在第一个API请求完成后才发出后续API请求?

来自分类Dev

同步发出多个ajax请求

来自分类Dev

如何发出多个http请求?

来自分类Dev

input()函数未发出请求

来自分类Dev

在一个http调用中发出多个请求-Google Apps脚本.fetch

来自分类Dev

如果在此期间发出请求,服务器仅在几分钟后关闭

来自分类Dev

SwiftUI中异步请求完成后如何调用函数?

来自分类Dev

ajax获取请求后未调用success()函数

来自分类Dev

使用PHP中的SoapCall函数发出SOAP请求后,获取异常“方法不允许”

来自分类Dev

表示浏览器发出请求时两次调用的中间件函数

来自分类Dev

Scrapy Spider会产生多个项目,但每个请求仅在第一个调用管道

来自分类Dev

多个事件全部触发后如何调用函数

来自分类Dev

反应-Axios调用发出太多请求

来自分类Dev

从请求外部调用请求函数

来自分类Dev

在获得响应之前发出多个请求

来自分类Dev

如何发出多个http呼叫请求(Nodejs)

来自分类Dev

AngularJS应用向后端发出多个请求

Related 相关文章

  1. 1

    仅在Angular中发出$ http请求后,才能运行javascript函数?

  2. 2

    https 请求在循环中,在发出最后一个请求后调用函数节点

  3. 3

    如何仅在所有请求完成后调用函数?

  4. 4

    在Python上发出发布请求时,如何调用函数?

  5. 5

    从发出api请求的函数调用中获取响应或错误

  6. 6

    Javascript onclick函数仅在异步请求后才能工作。

  7. 7

    $ http仅在发出简单的ajax请求时才调用错误?

  8. 8

    仅在触发了多个其他事件之后,如何使用RxJS和Observables发出http请求?

  9. 9

    仅在setState完成后返回调用者函数

  10. 10

    仅在解析模板后才调用链接器函数

  11. 11

    仅在中间件完成其任务后调用函数

  12. 12

    如何调用通过请求后调用的python flask函数?

  13. 13

    如何仅在第一个API请求完成后才发出后续API请求?

  14. 14

    同步发出多个ajax请求

  15. 15

    如何发出多个http请求?

  16. 16

    input()函数未发出请求

  17. 17

    在一个http调用中发出多个请求-Google Apps脚本.fetch

  18. 18

    如果在此期间发出请求,服务器仅在几分钟后关闭

  19. 19

    SwiftUI中异步请求完成后如何调用函数?

  20. 20

    ajax获取请求后未调用success()函数

  21. 21

    使用PHP中的SoapCall函数发出SOAP请求后,获取异常“方法不允许”

  22. 22

    表示浏览器发出请求时两次调用的中间件函数

  23. 23

    Scrapy Spider会产生多个项目,但每个请求仅在第一个调用管道

  24. 24

    多个事件全部触发后如何调用函数

  25. 25

    反应-Axios调用发出太多请求

  26. 26

    从请求外部调用请求函数

  27. 27

    在获得响应之前发出多个请求

  28. 28

    如何发出多个http呼叫请求(Nodejs)

  29. 29

    AngularJS应用向后端发出多个请求

热门标签

归档