setTimeout(function(){ console.log('D');
},0) var promise = new Promise(function(resolve, reject){ console.log('A');
resolve('C');
}) console.log('B');
promise.then(function(value){ console.log(value)
});
这段代码AB先打印我没问题,就是不理解为什么是C先于D打印,按理说应该是setTimeout先把回调放进任务队列里面等待执行吧
2 回答
呼啦一阵风
TA贡献1802条经验 获得超6个赞
因为有俩个队列.
一个是 microtask 队列, 一个 macrotask 队列.
promise 是放入 microtask 队列的, 而 setTimeout 放入 macrotask 队列.
先处理 microtask 队列, microtask 队列每次处理直到队列为空, 接下来处理 macrotask 队列, macrotask 每次只处理的队列里的第一个任务, 当任务处理完后, 又会进入到 microtask 队列的处理. 如此反复.
添加回答
举报
0/150
提交
取消