new Promise(function (reslove) {
reslove('p1');
new Promise(function (reslove) {
reslove('p2');
}).then(function (data) {
console.log(data);
});
}).then(function (data) {
console.log(data);
});
打印的结果是p2,p1
解析:
破案了 resolve执行的时候做两件事,第一是将状态从pending-->fullfiled,第二件事是同步执行其所在promise后的第一个then,但是并不是立即去调,而是等到promise里的所有同步任务执行完毕再去调用then(), 所以本题的执行顺序是: 立即执行reslove('p1'),将状态变成fullfiled,立即执行第二个Promise,第二个Promise里的resolve('p2')立即执行,将状态变成fullfiled,此时第二个Promise没有了同步任务,立即执行其后的then(),将callback2注入微任务队列,此时promise1同步任务执行完毕,立即执行自己的then,将callback1注入微任务队列,所以执行顺序是p2,p1