如何在承诺中返回修改后的结果作为承诺
Posted
技术标签:
【中文标题】如何在承诺中返回修改后的结果作为承诺【英文标题】: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 ...
【问题讨论】:
【参考方案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
。以上是关于如何在承诺中返回修改后的结果作为承诺的主要内容,如果未能解决你的问题,请参考以下文章
PromiseKit 如何将“when(resolved)”作为承诺返回?