我是一名 NodeJS 新手,我尝试从通过 COM 通信的电表读取数据并在 NodeJS 中显示。当我在函数中使用Promise从COM端口返回读取数据时,如果返回时间超过5秒,我会遇到问题,因为我安装了它,它会显示系统错误。我的愿望是,如果我有 5 秒的数据,则将其返回给我。如果时间超过 5 秒,我想得到“false”。
function getMeterData(buffer) {
//Send request to Meter
meterConnect.write(buffer, function(err) {
if (err) {
console.log("Send request to Meter failed. Detail: " + err.message);
return false;
}
});
//Get data from the meter
return new Promise(function(resolve, reject) {
var timer = setTimeout(function() {
reject(false);
}, 5000);
meterData.on("data", function(dataReceive, err) {
if (err) {
console.log("The process of receiving data is faulty");
reject(err);
}
clearTimeout(timer);
resolve(dataReceive);
});
});
}
当我传递正确的缓冲区并立即返回时,代码不会失败,但如果我发送不正确的缓冲区,则没有仪表将返回该值,并且 5 秒后我想得到错误的结果。但结果是,如果 5 秒后没有值,它会返回一堆错误。
(node:19664) UnhandledPromiseRejectionWarning: false
(node:19664) 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:19664) [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.
最佳答案
如果您希望在 5 秒后返回 false,请使用 resolve(false)
而不是 reject(false)
拒绝就像抛出错误。这将导致您的 promise拒绝,并且不返回任何内容。
使用resolve返回一个值。
请注意,返回值是一个解析为 false 的 Promise,而不是值 false 本身。您需要使用 .then 或 wait 来获取实际值
关于javascript - NodeJS 未处理的 promise 拒绝问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55100687/