gpt4 book ai didi

ios - 调度组不允许执行 Alamofire 请求

转载 作者:行者123 更新时间:2023-11-30 11:19:47 25 4
gpt4 key购买 nike

我正在使用 DispatchGroup 等待我的函数之一的回调执行后再继续。在该函数中,我调用 Alamo fire get 请求。当我引入 DispatchGroup 时,出现了我的问题,AlamoFire 闭包永远不会被执行。

示例

let group = DispatchGroup()

group.enter()
Networking.getInfo(userID: userID) { info in
group.leave()
}

group.wait()

网络类:

static func getInfo(userID: Int, completion: @escaping(_ info: String) -> Void) {
// Program reaches here
Alamofire.request("https://someurl.com").responseJSON { response in
// Program does NOT get here
if let json = response.result.value {
completion("Successful request")
} else {
completion("Some Error")
}
}
}

当我不使用 DispatchGroup 时,它工作正常。当我使用 DispatchGroup 时,getInfo 函数会启动,但 Alamofire 请求的关闭永远不会执行。

最佳答案

不确定我是对的,但我怀疑 Alamofire 响应正在该组已挂起 (wait()) 的同一个队列(主)上排队。由于队列已挂起,因此完成闭包永远不会执行。

手动编写这样的异步代码可能非常棘手。我的建议是使用任何一个可以帮助解决此问题的异步库。我个人最喜欢的是PromiseKit它还具有支持 Alamofire 的特定扩展。像这样的项目可以解决异步代码带来的很多麻烦。他们可能需要一些时间来让您了解他们的范例,但这是值得做的。

关于ios - 调度组不允许执行 Alamofire 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51413413/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com