【发布时间】:2017-08-23 17:35:20
【问题描述】:
我正在进行网络调用以将图像上传到后端服务器。现在我正在使用以下代码。此代码在互联网在线的条件下完美运行。
// MARK: - PUT
static func PUT(URL: String,
data: Data,
mimeType: String,
headers: [String: String]?) -> Promise<Void>
{
return Promise { fulfill, reject in
let URL = try! URLRequest(url: URL, method: .put, headers: headers)
Alamofire.upload(
multipartFormData: { multipartFormData in
multipartFormData.append(InputStream.init(data: data), withLength: UInt64(data.count), name: "image", fileName: "file.png", mimeType: mimeType)
},
with: URL,
encodingCompletion: { encodingResult in
switch encodingResult {
case .success(let upload, _, _):
upload.responseJSON { response in
if response.result.value == nil {
fulfill()
}else {
reject(response.result.error!)
}
}
case .failure( _):
break
}
})
}
}
}
如果我将其置于离线模式。它仍然会执行函数并且仍然 fullfills() 承诺。即使网络处于离线状态。我认为这是因为它正在检查 encodingResult 是否成功。不适用于网络调用本身。
如何检查网络调用是否成功?它正在返回 Void。
导入备注:
- 如果我们收到 200 码表示已上传图片,服务器返回 nill。
【问题讨论】:
-
我不明白这个。首先,在
.failure的情况下,您不履行或拒绝。我原以为你想reject。其次,如果回复是.success,但没有value,则表示您正在履行承诺,但如果您确实收到了value,则表示您正在拒绝。这似乎倒退了。 -
如果我们有 200 码,服务器返回“nil”。这就是它的设置方式。你说得对,我需要在 .failure 中添加拒绝,但这并不能改变这种情况。
-
您将如何更改现有代码? :) 感谢您的提示
标签: ios swift network-programming alamofire promisekit