Javascript node.js事件循环,setTimeout和Promise.then的执行顺序不稳定
代码是:Javascript node.js事件循环,setTimeout和Promise.then的执行顺序不稳定,javascript,node.js,libuv,Javascript,Node.js,Libuv,代码是: setTimeout(function () { console.log('setTimeout1') Promise.resolve().then(function () { console.log('promise') }); }) setTimeout(function () { console.log('setTimeout2'); }); 我阅读了node.js的文档,了解了事件循环的6个阶段。 但是我不明白为什么代码的输出是
setTimeout(function () {
console.log('setTimeout1')
Promise.resolve().then(function () {
console.log('promise')
});
})
setTimeout(function () {
console.log('setTimeout2');
});
我阅读了node.js的文档,了解了事件循环的6个阶段。
但是我不明白为什么代码的输出是不稳定的?
我认为输出应该是(环境:node.js 8.6.0)
但结果是
setTimeout1
promise
setTimeout2
或
也许与“微任务”有关?也许值得注意的是,在firefox中,上述代码总是(至少就我所尝试的)产生
setTimeout1、promise、setTimeout2
谢谢@Jaromanda X的评论。但是node.js和browser之间的事件循环模型可能不同。很抱歉,我没有提到文本上方的node 8.6.0环境中运行的代码。我只是注意到了其中的差异。我也看到了95%的1,2,p
顺序和5%的1,p,2
(在node 10.0.0中)-老实说,我期待1,p,2
顺序(因为这也是你在Chrome浏览器中得到的顺序-nodejs不应该使用Chrome js引擎吗?)@Mark_M setTimeout()没有延迟参数默认设置为1。它与process.nextTick()不同。
setTimeout1
promise
setTimeout2
setTimeout1
setTimeout2
promise