async/await 语法糖

1,541 阅读1分钟

定义:

promise + generator 的语法糖,让promise对异步操作的管理更便捷

用法

async用来修饰一个函数

  • 让函数返回的结果变为一个promise实例
  • 在函数中可以使用await「最常见的目的」

举例:

  1. 返回一个promise 实例

      `  async function fn(){
    
         return 10;
    
         }
    
       console.log(fn())   `
    
     此时的结果不再是10,而是一个promise 实例 状态:fulfilled 值为10
    
  2. 在函数中可以使用await

     `(async  function(){
    
      let value = await query1();
    
      console.log('第一次成功',value)
    
      value = await query2();
    
      console.log('第二次成功',value)
      })()`
      
      
    

await使用的注意事项

  1. let xxx = await ...;

  2. await 后面跟着的是一个promise实例,如果不是,则会默认变为状态为成功,值是原来值的promise实例

  3. await 100;-> await Promise.resolve(100);

  4. 在当前的私有上下文中,await下面的代码执行,需要等待await后面的promise实例为成功,才会执行!活生生的把异步操作模拟出来同步的效果

  5. 如果后面的promise实例是失败的,则下面的代码不会执行!

  6. xxx接受到的是:实例为成功状态下,实例存储的那个值

  7. 函数中遇到await,首先会把“它下面代码执行”这个事(任务),放在webAPI中去监听...然后再去看其后面的promise实例是成功还是失败:至于实例状态为成功的时候,才会把之前监听的任务挪至到“异步的微任务队列中“排队中等着执行!!(await中的异步编程)

await异常处理

 `(async function(){

   try{
   
   await Promise.reject('no')

   }catch(err){
    
    //失败干的事情,catch里面可以啥也不写,但是控制台就不会抛红了
   }

   })
   `