主页 > 人工智能  > 

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

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
标签:

JavaScript中多个Promise嵌套中,如何保证正确的执行顺序?由讯客互联人工智能栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“JavaScript中多个Promise嵌套中,如何保证正确的执行顺序?