Как найти, какие обещания не обрабатываются в узле.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?
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, и все, что соответствует любой из необработанных спецификаций отклонения (полная информация в документации).
Comments