PiCoderman
@PiCoderman
Web/Linux/Design/NodeJS

Как сделать обычный throw вместо unhandledRejection в NodeJS?

let go = async () => {
  throw new Error('Some Error');
}
go();

В результате в консоль просто выводится:
(node:14892) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: Some Error
(node:14892) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejec
tions that are not handled will terminate the Node.js process with a non-zero exit code.

А как сделать обычный throw?
  • Вопрос задан
  • 110 просмотров
Пригласить эксперта
Ответы на вопрос 2
eternalSt
@eternalSt
Ответ на Ваш вопрос есть в офф документации
Там же описана причина возникновения события "unhandledRejection".

Вообще есть несколько решений этой задачи, например как это предложили Сергей и Владлен Хеллсайт здесь же в ответа.

Другие варианты:
let go = async () => {
    throw new Error('Some Error');
  }

// можно выловить ошибку в другой async функции
  (async () => {
    try{
      await go()
    }
    catch(error){
      console.error(error); // напечатать лог
      process.exit(1); // вернуть код завершения отличный от нуля
    }
  })()

// Или повесить catch на функцию `go` , это тоже сработает
  go().catch(error => { 
      console.error(error); // напечатать лог
      process.exit(1); // вернуть код завершения отличный от нуля
  })


P.S. Если задать вопрос: "Какой шаблон лучше использовать?". То тут мнения расходятся. Как по мне, так нужно стараться всегда отлавливать ошибки, если это не возможно -- использовать process.on('unhandledRejection')
Ответ написан
@SaXXuM
process.on('unhandledRejection', function (err) {
  console.log('Caught exception: ', err);
});

let go = async () => {
  throw new Error('Inner Error')
}
go();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
OneTwoTrip! Москва
от 120 000 до 200 000 руб.
D2C.io Екатеринбург
от 70 000 руб.
BP Mobile Москва
До 250 000 руб.
14 авг. 2018, в 12:00
600 руб./в час
14 авг. 2018, в 11:32
1500 руб./за проект