Как найти, какие обещания не обрабатываются в узле.js UnhandledPromiseRejectionWarning?



узел.js из версии 7 имеет синтаксический сахар async/await для обработки обещаний, и теперь в моем коде довольно часто появляется следующее предупреждение:

(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.

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

362   2  

2 ответов:

слушать 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
});

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

node --trace-warnings app.js

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

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

    Ничего не найдено.

Добавить ответ:
Отменить.