gpt4 book ai didi

javascript - `.then` 和 `.catch` Promise 处理程序是否以某种方式配对并像 `.then(resolutionHandler, rejectionHandler)` 一样对待?

转载 作者:行者123 更新时间:2023-12-01 15:38:26 24 4
gpt4 key购买 nike

在 JavaScript 中使用 Promise 时,我们可以使用 .then , .catch.finally .这些方法中的每一个都返回一个新的 Promise目的。

使用 .then非常简单——我们将它们链接起来。 finally - 的用例是将它放在 .then 链的末尾和 .catch .但

在下面的代码中,据我了解,我们初始化 promise p可以解决或拒绝。我可以使用 .then(resolutionHandler, rejectionHandler) ,这是不言自明的,因为它只有 1 .then两个处理程序的“处理程序”,但在排序的情况下 .then.catch而不是后一种方法-

**是 .then.catch处理程序以某种方式配对并被视为 .then(resolutionHandler, rejectionHandler) ?还是发生了其他事情? **

const p = new Promise((resolve, reject) => {
reject("ups...");
});

p
.then(data => {
// this is success handler for Promise "p"
})
.catch(err => {
// Is this failure handler for Promise "p"?
})

最佳答案

不完全是。当你有 p.then(handleThen).catch(handleCatch) , 如果 p拒绝,handleCatch会处理它。但是handleCatch还将处理 handleThen 引发的错误.

虽然这些错误在 if handleThen 中是非常罕见的。仅包含同步代码,如果 handleThen返回一个 promise ,handleCatch如果它拒绝,它将能够处理该 Promise。

<somePromiseChain>
.catch(handleCatch);

将有 handleCatch处理上述 Promise 链中任何地方抛出的任何错误。

相比之下, p.then(resolutionHandler, rejectionHandler) , rejectionHandler仅限 处理拒绝 p .它将完全忽略 resolutionHandler 中发生的任何事情.

如果 resolutionHandler完全同步,不返回 Promise,从不抛出(这很常见),然后 .then(resolutionHandler, rejectionHandler)确实相当于 .then(resolutionHandler).catch(rejectionHandler) .但它是 usually a good idea使用 .then(..).catch(..) .

p.then(success).catch(fail) , .catch实际上附加到 .then 返回的 Promise - 但如果 p拒绝, .then的 Promise 也拒绝,与 p 的值相同的拒绝。不是 catch直接附加到 p ,但它附加到 .then通过 p的拒绝通过。

.then/ .catch直接附加到调用它的上 Promise,但有时上 Promise 通过其上 Promise 的值不变。那是。 p.then(undefined, fail).then(success)将运行 success如果 p解析,使用中间 .then通过决议。拒绝, p.then(success).catch(fail)将运行 fail因为 .then(success)通过 p 的失败通过不变。

关于javascript - `.then` 和 `.catch` Promise 处理程序是否以某种方式配对并像 `.then(resolutionHandler, rejectionHandler)` 一样对待?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61477858/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com