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

题目描述

求解这段代码的输出顺序:


console.log('begin');

setTimeout(() => {

  console.log('setTimeout 1');


  Promise.resolve()

    .then(() => {

      console.log('promise 1');

      setTimeout(() => {

        console.log('setTimeout2');

      });

    })

    .then(() => {

      console.log('promise 2');

    });

    

  new Promise(resolve => {

    console.log('a');

    resolve();

  }).then(() => {

    console.log('b');

  });


}, 0);

console.log('end');

实际输出顺序为:


begin

end

setTimeout 1

a

promise 1

b

promise 2

setTimeout2

谁能解释一下为什么是这个顺序呢?万分感谢


开心每一天1111
浏览 594回答 4
4回答

繁花如伊

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

相关分类

JavaScript