1. 当你遇到这个问题时:Uncaught SyntaxError: await is only valid in async functions and the top level bodies of modules。
    你就要去看一下你的await关键字是否放在async声明的函数里面,正确写法如下:
async function insideFn() {
   await promiseFn()
   console.log('第二步执行完毕')
 }
  1. async的就近原则
    有时候我们在async声明的函数里面使用await还是出现会上面的错误,比如下面代码会报错:
function promiseFn() {
    return new Promise((res) => {
      setTimeout(() => {
        console.log('第一步执行完毕');
        res('done')
      }, 500)
    })
  }

  async function outsideFn(){

    function insideFn() {
      await promiseFn()
      console.log('第二步执行完毕')
    }

    insideFn()
  }

  outsideFn()

这是因为await调用promise时,它所处的最近一层函数是insideFn,而async声明在更外部的函数outsideFn里面,这时我们只需要将async放入离await最近的函数insideFn就好,这就是async的就近原则:

function outsideFn(){

    async function insideFn() {
      await promiseFn()
      console.log('第二步执行完毕')
    }

    insideFn()
  }

在这里插入图片描述

Logo

基于 Vue 的企业级 UI 组件库和中后台系统解决方案,为数万开发者服务。

更多推荐