当前位置: 首页 > news >正文

JavaScript 中 多个 Promise 嵌套中,如何保证正确的执行顺序?

代码示例

console.log(1);
setTimeout(() => {
    console.log(2);
    Promise.resolve()
      .then(() => {
            console.log(3);
            setTimeout(() => {
                console.log(4);
            }, 0);
        })
      .then(() => {
            console.log(5);
        });
}, 0);
Promise.resolve()
  .then(() => {
        console.log(6);
        setTimeout(() => {
            console.log(7);
            Promise.resolve()
              .then(() => {
                    console.log(8);
                });
        }, 0);
    })
  .then(() => {
        console.log(9);
    });
new Promise((resolve, reject) => {
    console.log(10);
    resolve();
})
  .then(() => {
        console.log(11);
    });
console.log(12);

执行顺序解析

同步代码执行:

1.首先执行 console.log(1);,输出 1。
遇到 setTimeout,将其回调放入宏任务队列。
Promise.resolve().then() 把回调放入微任务队列。
new Promise 内部同步代码 console.log(10); 执行,输出 10,并将其 .then() 回调放入微任务队列。
执行 console.log(12);,输出 12。
2.微任务执行:
依次执行微任务队列中的回调,输出 6、11、9。在输出 6 时,内部 setTimeout 回调放入宏任务队列。
3.宏任务及后续微任务执行:
执行宏任务队列中的第一个 setTimeout 回调,输出 2,其内部 Promise.resolve().then() 回调放入微任务队列。
执行 Promise.resolve().then() 的第一个回调,输出 3,其内部 setTimeout 回调放入宏任务队列,接着执行第二个 .then() 回调,输出 5。
执行全局 Promise then 1 里 setTimeout 的回调,输出 7,其内部 Promise.resolve().then() 回调放入微任务队列并执行,输出 8。
执行前面 Promise then 1 里 setTimeout 的回调,输出 4。
最终输出顺序:1,10,12,6,11,9,2,3,5,7,8,4

相关文章:

  • Python学习心得面向对象的三大特征
  • Linux应急响应-系统排查
  • 【清华大学】DeepSeek从入门到精通完整版pdf下载
  • web网络安全:SQL 注入攻击
  • AI助力下的PPT革命:DeepSeek 与Kimi的高效创作实践
  • 测试面试及实用功能解读
  • Jenkins 创建 Node 到 Windows
  • 【Java八股文】08-计算机网络面试篇
  • 【C++】面向对象的三大特性
  • 企业存储系统
  • windows环境下用docker搭建php开发环境dnmp
  • armv7l
  • 蓝桥杯学习大纲
  • 使用jenkins构建Android+Flutter项目依赖自动升级带来兼容性问题及Jenkins构建速度慢问题解决
  • 基于射频开关选择的VNA校准设计
  • vue3 背景虚化,文字高亮效果
  • git输错用户名或者密码
  • 连续学习、增量学习有哪些应用场景?
  • JavaScript系列(77)-- Web Components 深入解析
  • vue3引用vue-ueditor-wrap组件
  • 少儿编程培训机构哪里好/江苏seo网络
  • 自己怎么做商城网站/新乡seo外包
  • 岳各庄网站建设/优化大师免费下载
  • 陕西渭南疫情最新消息/商丘seo推广
  • 政务中心网站建设方案/免费网站怎么做出来的
  • 国外租用服务器的平台/全网营销与seo