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

相关文章
|
Web App开发 搜索推荐 Android开发
AppsFlyer 研究(三)OneLink平台归因、跳转、深度链接
AppsFlyer 研究(三)OneLink平台归因、跳转、深度链接
1808 0
|
Swift iOS开发 Perl
如何解决Swift混编的module编译错误
前言很多iOS工程都是基于Object-C开发,再逐步向Swift演进,演进过程中不可避免要进行Swift混编。Swift模块需要支持LLVM Module规范,混编工程会遇到各种Module编译错误。这对于不熟悉的同学来说简直是灾难,严重影响开发效率。本文会介绍常见的Module编译错误,希望对大家有所帮助。常见错误1:Could not build module xxx当一个OC模块引用了Sw
7479 1
如何解决Swift混编的module编译错误
|
iOS开发
IOS - iOS 12 的“隐式推送”功能怎么用?
IOS - iOS 12 的“隐式推送”功能怎么用?
580 0
IOS - iOS 12 的“隐式推送”功能怎么用?
|
6月前
|
开发工具 开发者 iOS开发
如果苹果上架审核7个工作日仍无反应如何向苹果官方询问进度和提交反馈-App Store Connect方式和发送邮件询问方式-优雅草卓伊凡
如果苹果上架审核7个工作日仍无反应如何向苹果官方询问进度和提交反馈-App Store Connect方式和发送邮件询问方式-优雅草卓伊凡
935 2
如果苹果上架审核7个工作日仍无反应如何向苹果官方询问进度和提交反馈-App Store Connect方式和发送邮件询问方式-优雅草卓伊凡
|
8月前
|
机器学习/深度学习 人工智能 算法
2025 年,程序员如何找准技术“掘金点”?
大家好,我是V哥。2024年虽已过去,但经济形势依然严峻,市场经济不见好转。然而,新的机遇也在涌现,特别是在科技领域。2025年,人工智能、量子计算、基因编辑和商业航天等前沿技术蓬勃发展,为程序员带来无限可能。AI与机器学习、鸿蒙原生应用开发、物联网等领域前景广阔,值得深入探索。面对挑战,选择关键在于个人兴趣、行业需求和技术潜力。通过不断学习、实践和建立人际网络,程序员们可以在技术浪潮中脱颖而出,书写属于自己的职业华章。关注V哥爱编程,一起决战2025!
508 9
|
前端开发 UED
React Suspense 大揭秘!异步加载与优雅降级的神奇黑科技,让你的 React 应用更出色!
【8月更文挑战第31天】React Suspense 是 React 提供的一种处理异步数据加载和优雅降级的特性。它通过 `React.lazy` 和 `Suspense` 组件实现异步加载,在加载过程中显示提示信息,并通过错误边界组件 `Error Boundary` 捕获错误,避免应用崩溃,从而提升用户体验。
299 0
|
存储 ice 索引
经验大分享:PJSUA2开发文档
经验大分享:PJSUA2开发文档
532 0
|
存储 iOS开发 UED
iOS 性能检测新方式​——AnimationHitches
iOS 性能检测新方式​——AnimationHitches
iOS 性能检测新方式​——AnimationHitches
|
IDE Java 开发工具
【Android 从入门到出门】第一章:Android开发技能入门指南
【Android 从入门到出门】第一章:Android开发技能入门指南
317 3
|
编解码 缓存 调度
Flutter笔记:Flutter的应用生命周期状态(lifecycleState)管理
Flutter笔记:Flutter的应用生命周期状态(lifecycleState)管理
615 0