json - 使用 PromiseKit 和 Swift 标准网络处理拒绝?

标签 json swift networking promisekit

我有一个小函数,它使用 native 解决方案来解析和解码 JSON。除了处理错误之外,一切正常。我知道当错误发生时,我应该得到带有 errormessage

的 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
    }
}

当收到错误时 - 没有崩溃,但我收到错误待处理的 promise 已解除分配!这通常是一个错误。常问问题。但 PromiseKit 并没有帮助我。

我是否应该解码带有错误的 JSON 并更改整个 reject 闭包?

最佳答案

if 语句的这一部分既不满足也不拒绝。

else if let response = response {
    print(response)
}

如果您既不履行也不拒绝,则 promise 永远不会解决,如果 Unresolved promise 被解除分配,它会将您看到的警告打印到控制台。

请参阅 PromiseKit 故障排除指南以了解更多信息。

关于json - 使用 PromiseKit 和 Swift 标准网络处理拒绝?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47144461/

相关文章:

ios - UILabel 没有立即获取内容

ios - Xcode 8.2 : Swift3- how to hide status bar?

javascript - 在 JavaScript 中过滤和循环非数组平面 JSON 对象

ios - view.center 命令后 subview 框架未更新

linux - netlink 和大端格式

android - 无法弄清楚在 OkHttp 的 onResponse 方法中要检查什么

javascript - 是否可以在不使用服务器的情况下在不同计算机(但在同一 WLAN 上)的两个浏览器之间发送数据?

ruby-on-rails - 如何用 Oj gem 替换 Ruby 中的 to_json?

javascript - JQuery AJAX COR 错误

json - 如何使用 Redshift 从 JSON 数组列获取值?