在一个网站上看到的,看了整篇文章,还是不知道这个的结果时怎么出来的,真的好菜,特来向大家请教下怎么来的(麻烦详细点,比较笨。)
console.log(1);
new Promise(function (resolve, reject){
reject(true);
window.setTimeout(function (){
resolve(false);
}, 0);
}).then(function(){
console.log(2);
}, function(){
console.log(3);
});
console.log(4);
顺便帮作者打波广告,文章原链接:链接描述
这里涉及到 微任务和
Promise
的唯一状态(状态一旦确定,不可更改)首先执行
console.log(1);
接着进入
Promise
,执行reject(true)
,这时,reject
对应的回调被送入微任务,Promise
的状态已经确定(reject)发现
setTimeout
,放入异步队列中跳出
Promise
,执行console.log(4);
这时执行栈为空,检查微任务队列,执行
console.log(3);
这时微任务队列为空,发现异步队列有任务可以触发,执行
setTimeout
内部的resolve(false);
,但Promise
的状态唯一性,因此被忽略。