javascript - NodeJS 未处理的 promise 拒绝问题

标签 javascript node.js visual-studio-code serial-port

我是一名 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/

相关文章:

visual-studio-code - 用于在命令面板和文件选择器中导航的 VS Code 快捷方式

javascript - typescript :属性 'name' 在类型 'FormDataEntryValue' 上不存在

javascript - jQuery:如何从一个 td 导航到表中的另一个特定 td

javascript - JS时区转换

node.js - 使用node.js utf8 console.log 输出

node.js - 如何在 Protractor 中为不同规范文件制作单独的报告?

javascript - Node EJS 将数据传递给包含

Angular 组件命名限制 - 'selector [your component name] is invalid'

node.js - 调试 es6 代理作为属性 -> 内部错误 : illegal access

javascript - 选中复选框后如何启用单选按钮?