async await

100 阅读1分钟

async将你的函数返回值转换为promise对象,不需要显式地返回promise对象,async关键字自动将函数的返回值变为promise对象

await关键字只能在带有async关键字的函数内部使用,在外部使用时会报错。await等待的是右侧的表达式结果,如果右侧是一个函数,等待的是右侧函数的返回值。await在等待时会让主线程阻塞下面的执行。await之后如果不是promise,await会阻塞下面的代码,会先执行async外面的同步代码,等外面的同步代码执行完成在执行async中的代码。如果它等到的是一个 promise 对象,await 同样也会暂停async后面的代码,先执行async外面的同步代码,等着 Promise 对象 fulfilled,然后把 resolve 的参数作为 await 表达式的运算结果。

总结: 等await后面以及async函数外部执行完毕之后再执行async函数中await下面的代码

//表达式
async function test1() {
  console.log(1);
  return await 2 > 1 ? "对" : "不对"
}
test1().then(res => {
  console.log(res);
})
console.log(2);

结果:

1
2
对
//函数
async function test1() {
  console.log(1);
  await test2()
  console.log(6);
}
async function test2() {
  console.log(2);
  await console.log(3);
  console.log(5);
}
test1()
console.log(4);