时间是最好的解药_
Promise的回调函数属于异步任务,会在同步任务之后执行
new Promise(function (resolve, reject) {
resolve(1);
}).then(console.log);
console.log(2);
// 2
// 1
但是,Promise的回调函数不是正常的异步任务,而是微任务(microtesk)。他们的区别在于,正常任务追加到下一个事件循环,微任务追加到本轮时间循环。这意味着,微任务的执行时间一定早于正常任务。
setTimeout(function() {
console.log(1);
}, 0);
new Promise(function (resolve, reject) {
resolve(2);
}).then(console.log);
console.log(3);
// 3
// 2
// 1
上面代码的输出结果是321。这说明then回调的执行时间早于setTimeout(fn, 0)。因为then是本轮事件循环,setTimeout(fn,0)在下一轮时间循环开始时执行。
参考文献:http://javascript.ruanyifeng.com/advanced/promise.html#toc9