- 当你遇到这个问题时: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('第二步执行完毕')
}
- 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()
}