Асинхронная обработка исключений с помощью промисов Bluebird
Вопрос: Как обрабатывать необработанные исключения в асинхронных обратных вызовах с помощью промисов Bluebird?
Обещания Bluebird по своей сути не перехватывают исключения, возникающие из асинхронных обратных вызовов, в отличие от домены.
A: используйте конструкторы обещаний или замыкания then() для обработки исключений.
Чтобы перехватывать исключения в асинхронных обратных вызовах, оберните обратный вызов в конструктор обещаний или then( ) замыкание:
function getPromise(){
return new Promise(function(done, reject){
setTimeout(function(){
throw new Error("AJAJAJA");
}, 500);
}).then(function() {
console.log("hihihihi");
throw new Error("Oh no!");
});
}
Избегайте создания пользовательских асинхронных обратных вызовов
Никогда не генерируйте исключения непосредственно в пользовательских асинхронных обратных вызовах (за исключением обратных вызовов обещаний). Вместо этого отклоните окружающее обещание:
function getPromise(){
return new Promise(function(done, reject){
setTimeout(done, 500);
}).then(function() {
console.log("hihihihi");
reject(new Error("Oh no!"));
});
}
Пример
Использование конструктора обещаний:
var p = getPromise();
p.then(function(){
console.log("Yay");
}).error(function(e){
console.log("Rejected",e);
}).catch(Error, function(e){
console.log("Error",e);
}).catch(function(e){
console.log("Unknown", e);
});
Вывод:
Error [Error: Oh no!]
Этот подход гарантирует, что исключения перехватываются и обрабатываются надлежащим образом, предотвращая сбой приложения.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3