我们可以在单个 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 4
和 Success 5
会记录在控制台中?
关于 then
和 catch
的关键事情之一是 他们 return 一个新的承诺 。这个新的承诺是基于 A) 你调用 then
或 catch
的承诺发生了什么,以及 B) 你提供的处理函数内部发生了什么(它 returns,或者它抛出的错误)。
在您的代码中,您通过 catch
收到拒绝,然后您从中 returning undefined
(因为 console.log
returns undefined
,并且您正在 return 计算它的 return 值)——它履行了 catch
创建的承诺(而不是拒绝它),其值为 undefined
,所以你连接到 then
的 fulfillment handler 会被调用。该处理程序还 returns undefined
,履行其承诺,因此调用下一个 then
处理程序。
在 catch
处理程序函数中,如果您想拒绝 catch
创建的承诺,要么抛出错误,要么 return 拒绝 is/will 的承诺。
以下是我的代码-
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 4
和 Success 5
会记录在控制台中?
关于 then
和 catch
的关键事情之一是 他们 return 一个新的承诺 。这个新的承诺是基于 A) 你调用 then
或 catch
的承诺发生了什么,以及 B) 你提供的处理函数内部发生了什么(它 returns,或者它抛出的错误)。
在您的代码中,您通过 catch
收到拒绝,然后您从中 returning undefined
(因为 console.log
returns undefined
,并且您正在 return 计算它的 return 值)——它履行了 catch
创建的承诺(而不是拒绝它),其值为 undefined
,所以你连接到 then
的 fulfillment handler 会被调用。该处理程序还 returns undefined
,履行其承诺,因此调用下一个 then
处理程序。
在 catch
处理程序函数中,如果您想拒绝 catch
创建的承诺,要么抛出错误,要么 return 拒绝 is/will 的承诺。