«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как вы обрабатываете необработанные исключения в асинхронных обратных вызовах с помощью обещаний Bluebird?

Как вы обрабатываете необработанные исключения в асинхронных обратных вызовах с помощью обещаний Bluebird?

Опубликовано 21 ноября 2024 г.
Просматривать:780

How do you handle unhandled exceptions in asynchronous callbacks with Bluebird promises?

Асинхронная обработка исключений с помощью промисов 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