【问题标题】:How to return a modified result in a promise as a promise如何在承诺中返回修改后的结果作为承诺
【发布时间】:2018-06-14 10:51:46
【问题描述】:

我正在使用带有 Alamofire 扩展的 promiseKit 6。在下面的函数中,我希望返回 Promise<JSON>(我使用 swiftyJson),但是来自 alamofire 调用的响应是一个包含元组的 Promise:Promise<(json: Any, response: PMKAlamofireDataResponse)>

当我从第一次得到它时,我怎样才能继续只返回 json 部分?谢谢:)

return firstly {
  self.requestClient.request(url, method: .get, parameters: nil, encoding: JSONEncoding.default, headers: nil).responseJSON()
}.then { arg in
  let (json, rsp) = arg
  return json
}

我也收到此错误:Cannot convert return expression of type 'Promise<_.T>' to return type 'Promise<JSON>' 上线:}.then { arg in ...

【问题讨论】:

    标签: swift promisekit


    【解决方案1】:

    您应该将 Any 转换为 JSON,试试这个(未测试),但文档说您可以使用 map/compactMap https://github.com/mxcl/PromiseKit/blob/master/Documentation/CommonPatterns.md

    return firstly {
        self.requestClient.request(url, method: .get, parameters: nil, 
              encoding: JSONEncoding.default, headers: nil).responseJSON()
    }.compactMap { data, rsp in
       return data as? JSON
    }
    

    【讨论】:

    • 我正在使用 promisekit alamofire 扩展,因此请求返回类型为:Promise<(json: Any, response: PMKAlamofireDataResponse)> 当您调用 responseJSON() 时,我已经更新了问题
    • 我认为是编译器类型的问题,但你能试试我更新的语法吗?你也可以尝试推断承诺类型
    • 好,我去试试
    • 进展如何?
    • 为我解决了,但必须首先删除 in
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多