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 的改造方式。

相关文章
|
8月前
|
前端开发 JavaScript
什么是 async、await ?
什么是 async、await ?
|
JSON 前端开发 JavaScript
async/await的应用
async/await的应用
66 0
|
前端开发 JavaScript
|
4月前
|
前端开发 JavaScript
async和await的错误处理
在TypeScript中,`async`和`await`是处理异步操作的语法糖,能够让异步代码看起来像同步代码。`async`函数返回的总是`Promise`对象。当`await`后跟的表达式为`reject`状态的`Promise`时,会抛出错误,需要通过`try/catch`、链式`.catch()`或外部`Promise`包装来处理错误,防止代码崩溃。
161 0
async和await的错误处理
|
8月前
|
前端开发 JavaScript
async/await
async/await
41 0
|
8月前
|
JSON 前端开发 JavaScript
什么是async和await?
什么是async和await?
67 0
|
8月前
|
前端开发 JavaScript
处理异步请求的 async/await 和 promise
处理异步请求的 async/await 和 promise
|
8月前
|
前端开发 JavaScript
|
前端开发 API
Async/Await 在何时该使用,何时不使用
使用 async/await 是在处理异步操作时的一种更简洁、易读的方式,它基于 Promise,并且可以使异步代码看起来像同步代码一样编写。然而,并不是所有情况下都需要使用 async/await。
224 0
|
前端开发
前端异步请求逐步进行二async/await
前端异步请求逐步进行二async/await
92 0