我在以下代码中观察到这一点:
setTimeout(function(){console.log('setTimeout')});
Promise.resolve(1).then(function(){console.log('promise resolve')})
无论我执行多少次,promise 回调总是在 setTimeout 之前记录。
我的理解是,这两个回调都计划在下一个滴答声中执行,我真的不明白是什么让承诺总是优先于超时。
原文由 weisk 发布,翻译遵循 CC BY-SA 4.0 许可协议
简短的回答承诺比事件循环堆栈中的 setTimeout 回调函数具有更好的优先级(或者我是如何理解的)。
长答案看这个视频。非常有帮助。希望这可以帮助。
https://www.youtube.com/watch?v=8aGhZQkoFbQ
感谢@MickJuice 为事件循环提供新的和更新的视频。
https://www.youtube.com/watch?v=cCOL7MC4Pl0