首先,需要明确一点: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))
的执行顺序是:
- 首先执行第一个 Promise(
Promise.resolve(Promise.resolve(1))
),它返回一个已解决的 Promise,值为 1。然后,.then()
函数被调用并输出 1。 - 然后执行第二个 Promise(
Promise.resolve('fffff')
),它返回一个已解决的 Promise,值为 'fffff'。然后,.then()
函数被调用并输出 'fffff'。 - 接着执行第三个 Promise(
Promise.resolve(Promise.reject(999))
),它返回一个被拒绝的 Promise。因为这是一个被拒绝的 Promise,所以会跳转到 .catch()
函数并输出 999。 - 最后执行第四个 Promise(
Promise.resolve(Promise.resolve(2444))
),它返回一个已解决的 Promise,值为 2444。然后,.then()
函数被调用并输出 2444。
总结来说,Promise 的执行顺序是按照它们在代码中的出现顺序来的。.then()
函数会立即执行,而 .catch()
函数只有在 Promise 被拒绝时才会执行。所以如果你看到的结果是 1 fffff 2444 999
,这实际上就是按顺序执行的代码的结果。
执行顺序应该是这样的,先执行 then 方法里面的错误,如果有捕获,错误不会继续向下传递。否则才进入 catch