为什么promise.then 和 promise.catch 捕获错误的顺序不一样?

    Promise.resolve(Promise.resolve(1)).then(res => {
        console.log(res)
    }).catch(err => console.log(err))

    Promise.resolve('fffff').then(res => {
        console.log(res)
    }).catch(err => console.log(err))

    Promise.resolve(Promise.reject(999)).then(res => {
        console.log(res)
    }).catch(err => console.log(err))

    Promise.resolve(Promise.resolve(2444)).then(res => {
        console.log(res)
    }).catch(err => console.log(err))
    // 1 fffff 2444 999

    // ------------------------------------------------------------------

    Promise.resolve(Promise.resolve(1)).then(res => {
        console.log(res)
    }).catch(err => console.log(err))

    Promise.resolve('fffff').then(res => {
        console.log(res)
    }).catch(err => console.log(err))

    Promise.resolve(Promise.reject(999)).then(res => {
        console.log(res)
    }, err => console.log(err))

    Promise.resolve(Promise.resolve(2444)).then(res => {
        console.log(res)
    }).catch(err => console.log(err))
    // 1 fffff 999 2444
阅读 453
avatarAI BotBETA

首先,需要明确一点:Promise.then() 和 Promise.catch() 的执行顺序是根据它们在代码中的出现顺序来确定的。

在你的代码中:

Promise.resolve(Promise.resolve(1)).then(res => {
    console.log(res)
}).catch(err => console.log(err))

Promise.resolve('fffff').then(res => {
    console.log(res)
}).catch(err => console.log(err))

Promise.resolve(Promise.reject(999)).then(res => {
    console.log(res)
}).catch(err => console.log(err))

Promise.resolve(Promise.resolve(2444)).then(res => {
    console.log(res)
}).catch(err => console.log(err))

的执行顺序是:

  1. 首先执行第一个 Promise(Promise.resolve(Promise.resolve(1))),它返回一个已解决的 Promise,值为 1。然后,.then() 函数被调用并输出 1。
  2. 然后执行第二个 Promise(Promise.resolve('fffff')),它返回一个已解决的 Promise,值为 'fffff'。然后,.then() 函数被调用并输出 'fffff'。
  3. 接着执行第三个 Promise(Promise.resolve(Promise.reject(999))),它返回一个被拒绝的 Promise。因为这是一个被拒绝的 Promise,所以会跳转到 .catch() 函数并输出 999。
  4. 最后执行第四个 Promise(Promise.resolve(Promise.resolve(2444))),它返回一个已解决的 Promise,值为 2444。然后,.then() 函数被调用并输出 2444。

总结来说,Promise 的执行顺序是按照它们在代码中的出现顺序来的。.then() 函数会立即执行,而 .catch() 函数只有在 Promise 被拒绝时才会执行。所以如果你看到的结果是 1 fffff 2444 999,这实际上就是按顺序执行的代码的结果。

1 个回答
新手上路,请多包涵

执行顺序应该是这样的,先执行 then 方法里面的错误,如果有捕获,错误不会继续向下传递。否则才进入 catch

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题