【问题标题】:Promises + Alamofire make sure network calls always on backgroundPromises + Alamofire 确保网络呼叫始终在后台
【发布时间】:2019-08-23 08:35:40
【问题描述】:

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 的目的是为了让所有网络调用都在后台线程上运行,而不管从主线程调用。我有一些更容易实现的链式网络请求。

这个假设正确吗?

【问题讨论】:

    标签: swift alamofire promisekit


    【解决方案1】:

    Alamofire 总是在后台队列上运行它的请求。在您的示例中,唯一不在后台的部分是 responseJSON 闭包。默认情况下,闭包在.main 队列上运行。我建议您采用responseDecodable 来解码您的响应,以便解析也在后台仅调用履行闭包中的承诺。 (我不确定是否需要在主队列上完成。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多