为了账号安全,请及时绑定邮箱和手机立即绑定

node eventloop 问题

node eventloop 问题

慕少森 2019-03-05 16:19:58
setTimeout(() => {  console.log(1)  Promise.resolve(3).then(data => console.log(data));}, 0)setTimeout(() => {  console.log(2)}, 0)我们知道setTimeout的的回调在timer阶段执行,然后2个setTimeout 都会被注册到timer阶段eventloop 检查timer时候,有2个setTimeout 然后执行,并且第一个setTimeout中的 promise.resolve() 在注册到microTask中,在timer 阶段结束 执行microTask.但是这个代码执行会出现 1 2 3 和 1 3 2 的结果所以有点不理解为什么会有这两种不同的结果。
查看完整描述

1 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

Note: When delay is larger than 2147483647 or less than 1, the delay will be set to 1.

timers_settimeout_callback_delay_args

这取决于timer阶段会不会认为第2个timer超时。
然后你可以改成

setTimeout(() => {

    console.log(1)

    Promise.resolve(3).then(data => console.log(data));

}, 0)


setTimeout(() => {

    console.log(2)

}, 0)


let d = Date.now();

while (!(Date.now() - d > 1)) {


}


查看完整回答
反对 回复 2019-04-09
  • 1 回答
  • 0 关注
  • 308 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号