swift - Promises + Alamofire 确保网络调用始终在后台进行

标签 swift alamofire promisekit

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/

相关文章:

ios - 使用 equalToSystemSpacingAfter 前后边距的布局

swift - 尝试在 Bluemix 上运行 Swift Vapor - 找不到 404 : Requested route does not exist

ios - 带有 Alamofire post 参数的 SwiftyJSON 对象

ios - Alamofire 请求很慢

swift - 从 json 数组快速加载到对象数组中

swift - PromiseKit 无法将类型 '[Result<TYPE>]' 的值分配给类型 '[TYPE]

ios - 无法在 ios swift Promisekit 上使用 then

swift - 重新加载 NSWindow Xcode Swift2

swift - 我应该如何在 BDD 中测试值对象类型的 "isEqual"方法?

swift - 如何使用 PromiseKit 在 Swift 3 中手动触发 Promise