在链中有 .catch 但使用 Node 6 获得 UnhandledPromiseRejectionWarning
Have .catch in chain but getting UnhandledPromiseRejectionWarning using Node 6
我有这个承诺链。
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)
});
我正在通过发送伪造的命令来测试超时承诺,该命令将使 sendPort 承诺无法解决。超时承诺在比赛中获胜并抛出拒绝,但在 .catch 处理拒绝之前会发出警告。
这里是超时承诺比赛
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 将 "Timed out" 放入控制台,因此它得到了处理...尽管不正确??
我正在使用节点 6,在其他帖子中似乎是这样,如果它没有在第一个滴答中处理,现在会发出警告。我不知道如何从那些解决这个问题。这应该如何处理?我尝试在超时承诺之后立即放置一个 .catch,但仍然在 .catch 之前收到警告。
_.pTimeout()
返回的承诺是孤立的,未处理拒绝。要处理它们,您需要在该特定承诺上使用 .catch()
,或者您需要添加一个 return
以便将其链接到父承诺,以便它会被更高级别捕获 .catch()
.我建议 returning/chaining 它,因为你很少希望一个 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)
});
我有这个承诺链。
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)
});
我正在通过发送伪造的命令来测试超时承诺,该命令将使 sendPort 承诺无法解决。超时承诺在比赛中获胜并抛出拒绝,但在 .catch 处理拒绝之前会发出警告。
这里是超时承诺比赛
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 将 "Timed out" 放入控制台,因此它得到了处理...尽管不正确??
我正在使用节点 6,在其他帖子中似乎是这样,如果它没有在第一个滴答中处理,现在会发出警告。我不知道如何从那些解决这个问题。这应该如何处理?我尝试在超时承诺之后立即放置一个 .catch,但仍然在 .catch 之前收到警告。
_.pTimeout()
返回的承诺是孤立的,未处理拒绝。要处理它们,您需要在该特定承诺上使用 .catch()
,或者您需要添加一个 return
以便将其链接到父承诺,以便它会被更高级别捕获 .catch()
.我建议 returning/chaining 它,因为你很少希望一个 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)
});