普通函数、promise 、setTimeout执行顺序

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。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容