猿问

哪个老哥解释一下这个Promise为什么是这样的输出顺序

题目描述
求解这段代码的输出顺序:
console.log('begin');
setTimeout(()=>{
console.log('setTimeout1');
Promise.resolve()
.then(()=>{
console.log('promise1');
setTimeout(()=>{
console.log('setTimeout2');
});
})
.then(()=>{
console.log('promise2');
});
newPromise(resolve=>{
console.log('a');
resolve();
}).then(()=>{
console.log('b');
});
},0);
console.log('end');
实际输出顺序为:
begin
end
setTimeout1
a
promise1
b
promise2
setTimeout2
谁能解释一下为什么是这个顺序呢?万分感谢
沧海一幻觉
浏览 791回答 2
2回答

牛魔王的故事

同步状态下顺序执行Promise新建后立即执行,then在当前脚本所有同步任务执行完才会执行,then方法返回的是一个新的Promise实例Promise.resolve方法允许调用时不带参数,直接返回一个resolved状态的Promise对象。事件队列里面Promise比setTimeout早执行所以应该是这样:=>'begin'=>定义了一个异步setTimeout1,先放到事件队列(setTimeout1),继续同步执行=>'end'=>同步代码执行完成,开始执行异步setTimeout1代码=>'setTimeout1'=>定义了异步Promise.resolve,返回一个Promise1,先放到事件队列(Promise1),继续同步执行=>新建Promise立即执行=>'a'=>同步代码执行完毕,返回新的Promise,先放到事件队列(Promise1,Promise)=>开始执行Promise1=>'promise1'=>继续同步执行,定义了一个异步setTimeout2,放到事件队列(Promise,setTimeout2)=>Promise1同步代码执行完毕,返回一个Promise2,放到事件队列(Promise,setTimeout2,Promise2)=>同步代码执行完毕,执行Promise代码=>'b'=>Promise完毕,队列中还有Promise2和setTimeout2=>先Promise2=>'promise2'=>继续setTimeout2=>'setTimeout2'
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答