Подтвердить что ты не робот

Как найти, какой promises не обрабатывается в nodejs UnhandledPromiseRejectionWarning?

nodejs из версии 7 имеет асинхронный режим ожидания синтаксического сахара для обработки   promises, в моем apis довольно часто появляется следующее предупреждение:

(node:11057) UnhandledPromiseRejectionWarning: Unhandled promise 
rejection (rejection id: 1): ReferenceError: Error: Can't set headers 
after they are sent.
(node:11057) 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.

К сожалению, нет ссылки на строку, в которой отсутствует улов. Есть ли способ найти его, не проверяя каждый блок catch try?

4b9b3361

Ответ 1

прослушать unhandledRejection событие процесса.

process.on('unhandledRejection', (reason, p) => {
  console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
  // application specific logging, throwing an error, or other logic here
});

Ответ 2

Правильный способ показать полный стек для необработанных отказов ES6 Promise - запустить Node.js с флагом --trace-warnings. Это покажет полную стекцию для каждого предупреждения, без необходимости перехватывать отклонение внутри вашего собственного кода. Например:

node --trace-warnings app.js

Если вы хотите фактически обработать необработанные отклонения (например, зарегистрировав их), вы можете использовать мой unhandled-rejection модуль вместо этого, который улавливает все необработанные отклонения для каждой основной реализации Promises, которая ее поддерживает, с одним обработчиком событий.

Этот модуль поддерживает Bluebird, ES6 Promises, Q, WhenJS, es6-promise, then/promise и все, что соответствует любой из необработанных спецификаций отклонения (полная информация в документации).