await原理

本文详细介绍了JavaScript中async和await的原理,指出async函数默认返回Promise对象,而await用于等待Promise解析。通过实例展示了await如何简化Promise的then方法,使代码更易读。总结中强调await会等待Promise状态改变后继续执行后续代码。
摘要由CSDN通过智能技术生成

async 与 await的原理

  • async 默认返回的就是一个Promise对象

    async function a() {
      console.log('a')
      return 'aaaaa'
    }
    console.log(a()) // Promise {<fulfilled>: "aaaaa"}
    
  • await的原理(用promise的then方法还原)

    const p = new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve(1)
      }, 2000)
    })
    async function fun(){
      const result = await p
      console.log(result)
      console.log('fun执行')
    }
    fun()
    // 执行后等待两秒依次输出 1, fun执行
    

    await其实就是简化了promise的then写法,这样的执行看起来似乎有点难以理解,但是了解then执行机制的朋友看到还原后的代码就很明了了。

    还原代码

    const p = new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve(1)
      }, 2000)
    })
    p.then(
      value => {
        console.log(value)
        console.log('fun执行')
      }
    )
    

    总结

    await要等到状态改变后才会执行await语句之后的代码

async/await是C#中用于编写异步代码的关键字。它基于任务(Task)和异步操作模式(Async Operation Pattern)来实现异步编程。当方法被标记为async时,这个方法可以包含await关键字,用于等待一个异步操作完成。在等待异步操作期间,方法会立即返回,不会阻塞线程。当异步操作完成后,方法会继续执行剩下的代码。 在编译时,编译器会将带有await关键字的代码转换为状态机(State Machine)的形式,以便正确处理异步操作的状态和结果。这样就实现了代码的简洁、易懂、易维护。 具体实现上,编译器会生成一个状态机类来管理异步操作的状态。每当遇到await关键字时,编译器会将await后面的表达式封装为一个任务(Task),并将控制权返回给调用者。当异步操作完成后,状态机会通过回调或轮询等方式,重新获取控制权并继续执行剩下的代码。 总结起来,async/await通过编译器实现的语法糖,使得编写异步代码变得更加简单和直观,同时保持了代码的可读性和可维护性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Async和Await异步编程的原理](https://blog.csdn.net/sD7O95O/article/details/116382292)[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^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [C# Async/Await原理剖析](https://blog.csdn.net/weixin_43990579/article/details/105417652)[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^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值