Promise的then方法中的回调函数和setTimeout执行顺序问题

 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先把回调放进任务队列里面等待执行吧


四季花海
浏览 1892回答 2
2回答

呼啦一阵风

因为有俩个队列.一个是 microtask 队列, 一个 macrotask 队列.promise 是放入 microtask 队列的, 而 setTimeout 放入 macrotask 队列.先处理 microtask 队列, microtask 队列每次处理直到队列为空, 接下来处理 macrotask 队列, macrotask 每次只处理的队列里的第一个任务, 当任务处理完后, 又会进入到 microtask 队列的处理. 如此反复.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript