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);