gpt4 book ai didi

javascript - Node : add catch-function to promise after construction

转载 作者:搜寻专家 更新时间:2023-11-01 00:27:36 26 4
gpt4 key购买 nike

考虑这段代码:

var p = new Promise(function(resolve, reject){
console.log("run");
setTimeout(reject, 5);
});

p.catch(function() {
console.log("cought!");
});

p.then(function() {
console.log("then!");
});

输出(浏览器):

run
cought!

在这里,它在浏览器中的行为符合预期。 Bun 作为我得到的 Node 脚本运行:

run
cought!
(node:13927) UnhandledPromiseRejectionWarning: undefined
(node:13927) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:13927) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

所以拒绝被捕获,但 Node 仍在提示 - 为什么?

我可以按照建议将所有内容链接在一起 herehere :

new Promise(function(resolve, reject){
console.log("run");
setTimeout(reject, 5);
}).then(function() {
console.log("then!");
}).catch(function() {
console.log("cought!");
});

输出(浏览器和 Node ):

run
cought!

在我的用例中,我不能使用这个解决方案,因为我有一个构建 Promise 的工厂函数。 catch 和 then 函数应由工厂的调用者附加。在 then 函数的情况下它可以工作,但不能用于 catch。 我怎样才能避免这个警告?

最佳答案

Promise 是多播的,因此每次调用 .then.catch 时,您都会得到一个新的 promise 对象(链)。也就是说,p.thenp.catch 都返回各自独立的 promise 对象。这意味着 p.then 没有捕获路径。

如果无法将 promise 链接在一起,那么您将不得不处理由 .then 创建的新 promise 链中的错误。如果您愿意,您可以吞下这个异常,但它一个单独的异常:

p.then(function() {
console.log("then!");
}).catch(() => {});

关于javascript - Node : add catch-function to promise after construction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53670838/

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