Асинхронная обработка ошибок с помощью цепочки обещаний
При работе с асинхронным кодом крайне важно подумать о том, как эффективно обрабатывать ошибки. Неперехваченные исключения могут привести к сбою вашего приложения, поэтому важно иметь соответствующую стратегию.
В описанном сценарии создается промис с setTimeout, который выдает ошибку. Обработчик catch Bluebird Promise не перехватывает эту ошибку, поскольку она возникает в асинхронном обратном вызове.
Обработка исключений внутри промисов
Однако промисы могут перехватывать исключения, возникающие внутри промисов. свои собственные функции обратного вызова. Чтобы обработать этот тип ошибки, вы можете:
function getPromise() {
return new Promise(function(done, reject) {
setTimeout(done, 500);
}).then(function() {
console.log("hihihihi");
throw new Error("Oh no!");
});
}
Здесь ошибка выдается в обратном вызове then, что гарантирует, что она будет перехвачена обработчиком перехвата Promise.
Предостережения по поводу асинхронных обратных вызовов
Очень важно помнить, что промисы не перехватывают исключения из асинхронных обратных вызовов, которые не входят в их компетенцию. Чтобы справиться с этими типами ошибок, рассмотрите следующее:
Пример обработки несанкционированных асинхронных обратных вызовов
Чтобы обработать несанкционированный асинхронный обратный вызов в Node.js или браузере, вы можете использовать следующий подход:
function getPromise() {
return new Promise(function(done, reject) {
setTimeout(function() {
try {
// Your rogue async callback here
console.log("hihihihi");
} catch (e) {
reject(e);
}
}, 500);
});
}
Посредством ручной обработки любых исключений в обратном вызове этот подход гарантирует, что они не приведут к сбою вашего приложения.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3