gpt4 book ai didi

node.js - 在链中有 .catch 但使用 Node 6 获得 UnhandledPromiseRejectionWarning

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

我有这个 promise 链。

com.openPort(port).then(port => {
_.pTimeout(3000, com.sendPort(port, NCD.gen(args.cmd)))
.then(received => {
console.log('complete response: ', NCD.parse(received));
Debug.L1('resolved num data listeners: ', port.listenerCount("data"));
})
})
.catch(function(e) {
console.log('error: ', e)
});

我正在通过发送伪造命令来测试超时 promise ,该命令将使 sendPort promise 无法解析。超时 promise 在比赛中获胜并抛出拒绝,但在 .catch 处理拒绝之前会发出警告。

这是超时 promise 比赛

pTimeout: function(timeout, promise) {
return Promise.race([
promise,
new Promise(function(resolve, reject) {
setTimeout(function() {
reject('\nTimed out');
}, timeout);
})
]);
}

控制台显示

  (node:9616) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): 
Timed out

您可以在警告后看到 .catch 将“超时”发送到控制台,因此它得到了处理...尽管处理不当??

我正在使用 Node 6,在其他帖子中似乎是这样,如果它在第一个滴答中未被处理,现在会发出警告。我不知道如何从那些解决这个问题。这应该如何处理?我尝试在超时 promise 之后立即放置一个 .catch,但仍然在 .catch 之前收到警告。

最佳答案

_.pTimeout() 返回的 promise 是孤立的,并且不处理拒绝。要处理它们,您需要在该特定 promise 上使用 .catch(),或者您需要添加一个 return 以便将其链接到父级 promise ,以便获得被更高级别的 .catch() 捕获。我建议返回/链接它,因为您很少希望 promise 按照自己的步调进行并且根本不与父 promise 相关联:

com.openPort(port).then(port => {
return _.pTimeout(3000, com.sendPort(port, NCD.gen(args.cmd))).then(received => {
console.log('complete response: ', NCD.parse(received));
Debug.L1('resolved num data listeners: ', port.listenerCount("data"));
});
}).catch(function (e) {
console.log('error: ', e)
});

关于node.js - 在链中有 .catch 但使用 Node 6 获得 UnhandledPromiseRejectionWarning,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40076666/

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