Swift 中的 async await

Swift 中的 async await

async await

async-await 是在Swift 5.5 中的结构化并发变化的一部分,在swift中它主要用于允许多段代码同时运行。

async

async明确表明了一个方法执行异步操作,如下:

//定义了一个异步方法并且可以抛出异常
func fetchResult(_ value1: Int, _ value2: Int) async throws -> Int {
    
}

//async方法取代了以往我们使用的完成回调方法
func fetchResult(_ value1: Int, _ value2: Int, completion: (Result<Int, Error>) -> Void) {
    
}

await

await 是用于调用异步方法的关键字。awaitasync是一个组合,await始终等待async的回调。如下:

do {
    let ret = try await fetchResult(5, 6)
    print("Fetched result: \(ret).")
} catch {
    print("Fetched err: \(error).")
}

当然,直接使用也许会遇到这种错误 ‘async’ call in a function that does not support concurrency
这时可以使用

func useAsyneAwait() async {
    do {
        let ret = try await fetchResult(5, 6)
        print("Fetched result: \(ret).")
    } catch {
        print("Fetched err: \(error).")
    }
}

或者使用Task.init 从一个支持并发的新任务中调用异步方法

func useAsyneAwait() {
    Task {
        do {
            let ret = try await fetchResult(5, 6)
            print("Fetched result: \(ret).")
        } catch {
            print("Fetched err: \(error).")
        }
    }
}

最后组合

func fetchResult(_ value1: Int, _ value2: Int) async throws -> Int {
    let ret = value1 + value2
    //假设小于10就返回错误
    guard ret > 10 else {
        throw ResultError.failed
    }
    return ret
}

func fetchResult(_ value1: Int, _ value2: Int, completion: (Result<Int, Error>) -> Void) {
    
}

func useAsyneAwait() async {
    do {
        let ret = try await fetchResult(5, 6)
        print("Fetched result: \(ret).")
    } catch {
        print("Fetched err: \(error).")
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
在axiosasync/await是一种用于处理异步请求的语法。通过使用async关键字定义一个异步函数,然后在函数内部使用await关键字来等待异步操作的结果。这样可以使异步代码看起来更像同步代码,提高代码的可读性和可维护性。\[2\] 在使用axios进行异步请求时,可以将async/await与axios结合使用。例如,在一个异步函数,可以使用await关键字等待axios.get方法返回的Promise对象,以获取请求的结果。这样可以避免使用回调函数或者.then方法来处理异步操作。\[2\] 同时,async函数会隐式返回一个Promise对象,可以使用.then方法对返回的Promise对象进行链式编程,以处理异步操作的结果。\[2\] 总结来说,async/await是一种简化异步操作的语法糖,可以使异步代码更加清晰和易于理解。在axios,可以使用async/await来处理异步请求,使代码更加简洁和可读。\[2\] #### 引用[.reference_title] - *1* *3* [axios和async / await的基本用法](https://blog.csdn.net/weixin_51033461/article/details/118938930)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Axios和(async,await)](https://blog.csdn.net/weixin_44976833/article/details/104522054)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄权浩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值