NodeJS проблема с необработанным обещанием отказа - PullRequest
0 голосов
/ 11 марта 2019

Я новичок в NodeJS и пытаюсь прочитать данные с счетчика энергии, связывающегося через COM, и показать в NodeJS.Когда я использую Promise в функции для возврата прочитанных данных из COM-порта, у меня возникает проблема, если время возврата превышает 5 секунд, потому что я установил его, он покажет системную ошибку.Я хочу, чтобы, если у меня были данные в течение 5 секунд, верните их мне.Если время превышает 5 секунд, я хочу получить «ложь».

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.

1 Ответ

1 голос
/ 11 марта 2019

Если вы хотите вернуть false через 5 секунд, используйте resolve(false) вместо reject(false)

Отклонение похоже на выдачу ошибки.Это приведет к тому, что ваше обещание будет отклонено, и ничего не будет возвращено.

При использовании разрешения возвращается значение.

Обратите внимание, что возвращаемое значение - это обещание, которое преобразуется в ложь,не само значение false.Вам нужно будет использовать .then или ждать его, чтобы получить фактическое значение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...