Настройка управления ошибками
По умолчанию bluebird сразу же регистрирует стек вызовов при необработанном отклонении. Это похоже на то, как при необработанных исключениях регистрируется стек вызовов, чтобы у вас было что-то для работы, когда что-то не работает так, как ожидалось.
Однако, так как обработка отклоненного промиса возможна в любое время в неопределенном будущем, некоторые программистские подходы приведут к ложным срабатываниям. Поскольку такие подходы не нужны и всегда могут быть переписаны, чтобы не вызывать ложных срабатываний, мы рекомендуем это делать, чтобы отладка оставалась простой. Однако вы можете с этим не согласиться, поэтому bluebird предоставляет крючки для реализации более сложных стратегий обработки ошибок.
Такие стратегии могут включать:
- Регистрация после того, как промис стал доступен сборщику мусора (требуется модуль native node.js)
- Отображение списка отклоненных промисов в реальном времени
- Не использовать крючки и использовать
.done, чтобы вручную отметить конечные точки, где отклонения не будут обрабатываться - Игнорирование всех ошибок (проверьте свои навыки отладки)
- ...
Глобальные события отклонения
Начиная с версии 2.7.0, все экземпляры bluebird также генерируют глобальные события отклонения, позволяющие приложениям регистрировать один универсальный обработчик для них.
Глобальные события:
-
"unhandledRejection"(соответствует локальномуPromise.onPossiblyUnhandledRejection) -
"rejectionHandled"(соответствует локальномуPromise.onUnhandledRejectionHandled)
Прикрепление глобальных обработчиков событий отклонения в node.js:
// NOTE: event name is camelCase as per node convention
process.on("unhandledRejection", function(reason, promise) {
// See Promise.onPossiblyUnhandledRejection for parameter documentation
});
// NOTE: event name is camelCase as per node convention
process.on("rejectionHandled", function(promise) {
// See Promise.onUnhandledRejectionHandled for parameter documentation
});
Прикрепление глобальных обработчиков событий отклонения в браузерах:
Использование DOM3 addEventListener API (поддержка с IE9+):
// NOTE: event name is all lower case as per DOM convention
window.addEventListener("unhandledrejection", function(e) {
// NOTE: e.preventDefault() must be manually called to prevent the default
// action which is currently to log the stack trace to console.warn
e.preventDefault();
// NOTE: parameters are properties of the event detail property
var reason = e.detail.reason;
var promise = e.detail.promise;
// See Promise.onPossiblyUnhandledRejection for parameter documentation
});
// NOTE: event name is all lower case as per DOM convention
window.addEventListener("rejectionhandled", function(e) {
// NOTE: e.preventDefault() must be manually called prevent the default
// action which is currently unset (but might be set to something in the future)
e.preventDefault();
// NOTE: parameters are properties of the event detail property
var promise = e.detail.promise;
// See Promise.onUnhandledRejectionHandled for parameter documentation
});
В веб-воркерах вы можете использовать self.addEventListener.
Использование устаревших API (поддержка с IE6+):
// NOTE: event name is all lower case as per legacy convention
window.onunhandledrejection = function(reason, promise) {
// See Promise.onPossiblyUnhandledRejection for parameter documentation
};
// NOTE: event name is all lower case as per legacy convention
window.onrejectionhandled = function(promise) {
// See Promise.onUnhandledRejectionHandled for parameter documentation
};
© 2013–2018 Petka Antonov
Licensed under the MIT License.
http://bluebirdjs.com/docs/api/error-management-configuration.html