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,目的是所有网络调用都在后台线程上运行,而不管是从主线程调用。我有一些连锁网络请求,这些请求将更易于实现。
这个假设正确吗?
答案 0 :(得分:0)
Alamofire始终在后台队列上运行其请求。在您的示例中,唯一不在后台的部分是responseJSON
闭包。默认情况下,闭包在.main
队列上运行。我建议您采用responseDecodable
来解码您的响应,以使解析也仅在后台调用时才能实现闭包中的promise。 (我不确定是否有必要在主队列中执行任务。)