使用带有 Swift 标准网络的 PromiseKit 处理拒绝?
Posted
技术标签:
【中文标题】使用带有 Swift 标准网络的 PromiseKit 处理拒绝?【英文标题】:Handling reject with PromiseKit with Swift standard networking? 【发布时间】:2017-11-06 19:37:27 【问题描述】:我有一个小函数,它使用本机解决方案来解析和解码 JSON。一切正常,除了处理错误。我知道当错误发生时,我应该得到带有 error 和 message
的 JSON func fetchCardDetails(withNumber number: Int) -> Promise<CardDetails>
guard let URL = URL(string: "\(URLProvider.url)/\(APIKeyProvider.apiKey)/\(number)/") else
fatalError("Could not reformat string to URL!")
var request = URLRequest(url: URL)
request.httpMethod = "GET"
let decoder = JSONDecoder()
let session = URLSession.shared
return Promise fullfill, reject in
let dataTask = session.dataTask(with: request) data, response, error in
if let data = data,
let json = (try? decoder.decode(CardDetails.self, from: data))
fullfill(json)
else if let error = error
reject(error)
else if let response = response
print(response)
else if data != nil
let data = NSError()
reject(data)
else
reject(PMKError.invalidCallingConvention)
dataTask.resume()
func fetchCardDetails(number: Int)
_ = cardDetailsService.fetchCardDetails(withNumber: number).then cardDetails -> Void in
//some actions with cardDetails
收到错误时 - 没有崩溃,但我收到错误 Pending Promise 已解除分配!这通常是一个错误。常问问题。不过来自 PromiseKit 并没有帮助我。
我是否应该解码错误的 JSON 并更改整个 reject 闭包?
【问题讨论】:
【参考方案1】:if
声明的这一部分既不满足也不拒绝。
else if let response = response
print(response)
如果您既不履行也不拒绝,则承诺永远不会解决,如果未解决的承诺被解除分配,它会将您看到的警告打印到控制台。
有关详细信息,请参阅 PromiseKit 故障排除指南。
【讨论】:
以上是关于使用带有 Swift 标准网络的 PromiseKit 处理拒绝?的主要内容,如果未能解决你的问题,请参考以下文章
带有 XML 响应和正文的 SOAP 请求 swift 3,Alamofire