我们可以在单个 promise 返回函数中使用多个 then 吗?

Can we use multiple then in single promise returned function?

以下是我的代码-

const fn = () => new Promise((resolve, reject) => reject());
let promise = fn();

promise
.then(() => console.log('Success 1'))
.then(() => console.log('Success 2'))
.then(() => console.log('Success 3'))
.catch(() => console.log('Error 1'))
.then(() => console.log('Success 4'))
.catch(() => console.log('Error 2'))
.then(() => console.log('Success 5'))
.catch(() => console.log('Error 3'))

返回 -

"Error 1"
"Success 4"
"Success 5"

我的问题是,当承诺在 catch 中得到解决并输出 Error 1 那么为什么 Success 4Success 5 会记录在控制台中?

关于 thencatch 的关键事情之一是 他们 return 一个新的承诺 。这个新的承诺是基于 A) 你调用 thencatch 的承诺发生了什么,以及 B) 你提供的处理函数内部发生了什么(它 returns,或者它抛出的错误)。

在您的代码中,您通过 catch 收到拒绝,然后您从中 returning undefined(因为 console.log returns undefined,并且您正在 return 计算它的 return 值)——它履行了 catch 创建的承诺(而不是拒绝它),其值为 undefined,所以你连接到 then 的 fulfillment handler 会被调用。该处理程序还 returns undefined,履行其承诺,因此调用下一个 then 处理程序。

catch 处理程序函数中,如果您想拒绝 catch 创建的承诺,要么抛出错误,要么 return 拒绝 is/will 的承诺。