Alamofire Async Await
Alamofire Async Await
·
正常使用 URLSession 是能够支持 Await 写法的。例子如下:结合task就不用在每层的外部增加 async 关键字了。
Task {
let request = try URLRequest.init(url: "https://xxxxxxxx", method: .get)
let (data, response) = try await URLSession.shared.data(for: request)
let res = try JSONSerialization.jsonObject(with: data)
print("res is \(res)")
}
但是当使用Alamofire的时候就不能这么用了,需要转换一下方式。这种算是非结构话请求。
// 使用了 SwiftyJSON
// import SwiftyJSON
func get() async throws -> JSON {
try await withUnsafeThrowingContinuation({ continuation in
AF.request("https://xxxxxx").responseJSON { response in
switch response.result {
case .success(let value):
continuation.resume(returning: JSON(value))
case.failure(let error):
continuation.resume(throwing: error)
}
}
})
}
Task {
let handle = Task {
return try await self.get()
}
let result = try await handle.value
print("res is \(result.stringValue)")
}
这样改造一下就能使 Alamofire 也支持 async await 了。看起来非常像 javascript 的promise 的改造方式。
更多推荐
已为社区贡献1条内容
所有评论(0)