console.log(1)
setTimeout(() => {
console.log(2)
}, 0);
console.log(3);
new Promise((resolve) => {
console.log(4);
resolve();
console.log(5)
}).then(() => {
console.log(6);
});
console.log(7)
1 => 3 => 4 => 5 => 7 => 6 => 2
一个事件循环,但是任务队列可以有多个。
创建Promise实例时是同步的,故此1、3、4、5、7是同步执行的。
promise.then()、setTimeout都是异步执行的,都会在异步队列中等待执行。
而promise.then()异步会放到microtask queue(微任务队列)中,microtask queue队列中的内容是在当前脚本执行完毕后立即发生的事。所以当同步Promise创建实例完成后,就执行promise.then(),然后把setTimeout放入执行堆栈中执行,故先执行Promise,再执行setTimeout。
网友评论