Promise 是否始终在后台线程上运行。
@IBAction func doNetworkCall(_ sender: Any) { // Does this run on
background thread
Network.fetchPhotos().done { (photos) in
}
}
static func fetchPhotos () -> Promise<[Photo]> {
return Promise { seal in
AF.request("https:photosURL", method: .post, parameters: ["auth":"1231","user_id":"u12312"]).responseJSON { (response) in
guard let data = response.data else { return }
let coder = JSONDecoder()
let photos = try! coder.decode([Photo].self, from: data)
seal.fulfill(photos)
}
}
}
我使用了 Promise,目的是所有网络调用都在后台线程上运行,无论来自主线程的调用如何。我有一些链网络请求,这些请求会更容易实现。
这个假设正确吗?
最佳答案
Alamofire 始终在后台队列上运行其请求。在您的示例中,唯一不在后台的部分是 responseJSON
闭包。默认情况下,该闭包在 .main
队列上运行。我建议您采用 responseDecodable
来解码您的响应,以便解析也在后台进行,仅调用履行闭包中的 promise 。 (我不确定是否有必要在主队列上执行。)
关于swift - Promises + Alamofire 确保网络调用始终在后台进行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57622548/