gpt4 book ai didi

javascript - Promise 最终在函数中使用时的 JS 未捕获错误

转载 作者:行者123 更新时间:2023-12-04 15:03:14 25 4
gpt4 key购买 nike

这是JS代码:

function createPromise() {
const result = new Promise((resolve, reject) => {
setTimeout(() => {
reject(new Error('my error'));
}, 2000);
});
// uncomment this to get error
// result.finally(() => {
// console.log('finally before');
// });

return result;
}

function test() {
createPromise()
.then(() => {
console.log('promise then');
})
.catch((error) => {
console.log('promise catch:', error);
})
.finally(() => {
console.log('promise finally');
});
}

它工作正常,执行后我在控制台中看到了:

promise catch: Error: my error
promise finall

但取消注释后:

result.finally(() => {
console.log('finally before');
});

在控制台中我有未捕获的异常:

finally before
promise catch: Error: my error
promise finally
Uncaught (in promise) Error: my error

为什么会这样,如何解释?

最佳答案

未处理的 promise

.then.catch 一样,.finally 返回一个 promise 。但与 .catch.then 不同,它的第二个参数提供了一个 onrejection 处理程序,finally 没有实现 promise 如果链中的先前 promise 被拒绝,它会返回。

因此,没有 result promise 的注释的预期输出是相同的。但除此之外,.finally createPromise 中返回的 promise 没有拒绝处理程序。因此出现未捕获的 promise 拒绝错误。

函数 test 中的 .finally 没问题,因为前面的 catch 子句实现了它返回的 promise ,所以 .finally 不会拒绝保证它会回来。


更多关于 onfinally

  • 一般来说,.finally 子句将 promise 链中前一个 promise 的结果或 promise 拒绝原因传递到链中的下一个 promise。

  • 但是,如果 onFinally 处理程序抛出错误或返回被拒绝的 promise ,链中的下一个 promise 将因处理程序提供的相同错误或拒绝原因而被拒绝 - 任何数据或来自链中先前 promise 的拒绝原因被有效地丢弃。

关于javascript - Promise 最终在函数中使用时的 JS 未捕获错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66613162/

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