async、promise、setTimeout共存执行顺序
async function async1() {
console.log('async1 start') //2
//遇见await 执行await右边紧跟的表达式,然后让出线程,跳出async函数,
等待本轮同步代码全部执行完毕后再回头执行await 后面阻塞的代码
//await等待的结果分为两种情况:不是promise对象;是promise对象
//如果不是promise对象,await会阻塞后面的代码,先执行async外面的同步代码,
同步代码执行完,再回到async内部,把这个非promise的东西,作为await表达式的结果。
//如果等到的是一个promise对象,await也会暂停后面的代码,先执行async外面的同步代码,
等着promise对象fulfilled,然后把resolve的参数作为await表达式的运算结果。
await async2()
console.log('async1 end') //5
}
async function async2() {
console.log('async2') //3
}
console.log('script start') //1
setTimeout(function () {
console.log('setTimeout') //7
}, 0)
async1(); //2
new Promise(function (resolve) {
console.log('promise1') //4
resolve();
}).then(function () {
console.log('promise2') //6
})
console.log('script end') //5