Используя Node.js / Express возможно ли следующее () изнутри IIFE ошибка и перейти к промежуточному программному обеспечению обработки ошибок? - PullRequest
0 голосов
/ 12 января 2020

Вопрос: Используя Express возможно ли вернуть ошибку изнутри IIFE и перейти к промежуточному программному обеспечению для обработки ошибок?
Справочная информация: IIFE используется для создания asyn c контейнера для переноса await операторов. Я не вижу выхода из этого, и мне интересно, использую ли я неправильный базис c, паттерн вообще.

Упрощенный пример:

app.get('/', function(req, res, next) {

    (async function() {

        try {
            let example = await someLogic(x);
        } catch(err) {
            return next(new Error('oops'));
        } 
    })();

    console.log('main endpoint');
});

app.use(function(err, req, res, next) {

    console.log('my error', err.message);
});

1 Ответ

1 голос
/ 12 января 2020

При использовании Express возможно ли вернуть ошибку изнутри IIFE и перейти к промежуточному программному обеспечению для обработки ошибок?

Да, это работает нормально. Это вызовет next(err) просто отлично. Но ваш return вернется только из IIFE, а остальная часть вашего обработчика запросов после того, как try/catch все равно выполнится (не уверен, хотите ли вы этого или нет).


FYI, это возможно, проще объявить обработчик запроса как async, и тогда вам не понадобится обертка IIFE:

app.get('/', async function(req, res, next) {

    try {
        let example = await someLogic(x);

        console.log('main endpoint');
        // send some response here

    } catch(err) {
        return next(new Error('oops'));
    } 
});
...