账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    哪个老哥解释一下这个Promise为什么是这样的输出顺序
    • 2020-01-01 00:00
    • 10
    27
    0

    题目描述

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

    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
    

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

    1
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • Promise 是 JavaScript 中用来表示异步操作的一种处理机制。它的基本思想是,当一个异步操作完成时,Promise 对象将解析为一个单一值(值为异步操作的返回结果),然后通过.then 方法和 .catch 方法来处理异步操作的结果和错误。

      Promise 的输出顺序取决于异步操作的顺序和 .then 方法的处理方式。以下是一些常见的 Promise 输出顺序:

      1. 如果异步操作是一个立即执行的操作,那么Promise 将在 .then 方法执行之前解析为一个单一值。例如:

      Promise.resolve('Promise resolved');

      1. 如果异步操作是一个异步回调函数,那么Promise 将在 .then 方法执行之前解析为一个单一值,然后在 .then 方法中执行回调函数。

      Promise.resolve('Promise resolved').then((result) => { console.log(result); });

      1. 如果异步操作是一个 Promise,那么Promise 将在 .then 方法执行之前解析为一个单一值,然后在 .then 方法中执行回调函数。

      Promise.resolve('Promise resolved').then((result) => { console.log(result); }).catch((error) => { console.error(error); });

      1. 如果异步操作是一个 Promise,然后是一个异步操作,那么Promise 将在 .then 方法执行之前解析为一个单一值,然后在 .then 方法中执行回调函数,最后在 .catch 方法中处理错误。

      Promise.resolve('Promise resolved').then((result) => { console.log(result); }).then((result2) => { console.log(result2); }).catch((error) => { console.error(error); });

      请注意,不同的异步操作和 Promise 的顺序可能会有所不同,这取决于它们的执行顺序和 .then 方法的处理方式。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部