async await用法及原理总结

1.Async Await 原理(注:await 只能出现在 async 函数中)

  1. 当调用一个 async 函数时,会返回一个 Promise 对象 (关键)
  2. async 函数中可能会有 await 表达式,await表达式 会使 async 函数暂停执行,直到表达式中的Promise解析完成后继续执行 async 中 await 后面的代码并返回解决结果。
  3. 既然返回的是Promise 对象,所以在最外层不能直接获取其返回值,那么肯定可以用原来的方式:then() 链来处理这个 Promise 对象

原理:
async/await 函数其实就是一种语法糖
async/await 是基于promise实现的,async 函数其实就是把 promise 做了一个包装
await 返回值是一个 Promise 对象,它只是把 await 后面的代码放到了 Promise.then()

2. async awiat 的基本语法

// 当调用一个 async 函数时,会返回一个 Promise 对象 (关键)
// async/await 出现的异常是无法捕获的,需要借助 try/catch 来捕获异常
function sleep(flag) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            if(flag){
                resolve('success')
            }else{
                reject('Error')
            }
        }, 2000)
    })
}

// async await 的用法
async function fn(flag) {
    try {
        let result = await sleep(flag)
        return result
    } catch (err) {
        return err
    }
}
// 返回的 a,b 是一个 promise 对象
var a = fn(true)
var b = fn(false)
a.then((res)=>{
    console.log(res) // success
})
b.then((res)=>{
    console.log(res) // Error
})

3.async await 和 promise 的区别

  1. async/await 出现的异常是无法捕获的,需要借助 try/catch 来捕获异常
  2. 任何一个await后面的promise对象变为reject,那么整个async都会被中断
  3. 使用 async await 的话,catch 能处理 JSON.parse 错误
  • 11
    点赞
  • 90
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#中的asyncawait关键字是用于异步编程的特性。它们的原理是基于任务(Task)和异步操作模式(Async Pattern)。 使用async关键字修饰的方法可以被视为一个异步方法,而await关键字则用于等待一个异步操作的完成。当遇到await关键字时,程序会暂时挂起当前方法的执行,将控制权返回给调用者,直到异步操作完成后再继续执行。 在使用asyncawait进行异步编程时,通常会使用Task对象来表示异步操作。Task对象是.NET Framework中用于表示异步操作的标准方式,它可以表示一个正在执行的操作、已经完成的操作或者一个尚未开始的操作。 下面是一个简单的示例代码,演示了asyncawait用法: ```csharp public async Task<string> GetDataAsync() { // 模拟一个耗时的异步操作 await Task.Delay(1000); return "Data"; } public async Task Main() { Console.WriteLine("开始获取数据..."); string data = await GetDataAsync(); Console.WriteLine("获取到的数据为:" + data); } ``` 在上面的代码中,GetDataAsync方法被修饰为async,表示它是一个异步方法。在方法内部,使用await关键字等待一个异步操作Task.Delay(1000),模拟了一个耗时的操作。在Main方法中,使用await关键字等待GetDataAsync方法的执行结果,并将结果赋值给data变量。 需要注意的是,使用asyncawait进行异步编程时,方法的返回类型通常是Task或Task<T>,表示异步操作的结果。在调用异步方法时,可以使用await关键字等待异步操作的完成,并获取到操作的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值