题目描述求解这段代码的输出顺序: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');实际输出顺序为:beginendsetTimeout1apromise1bpromise2setTimeout2谁能解释一下为什么是这个顺序呢?万分感谢
2 回答
牛魔王的故事
TA贡献1830条经验 获得超3个赞
同步状态下顺序执行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'
添加回答
举报
0/150
提交
取消