Как обработать ошибку внутри попытки, используя только один улов? - PullRequest
0 голосов
/ 25 апреля 2019

Я использую try-catch для обработки ошибок моего кода.Даже много читая и ища, у меня все еще есть некоторые сомнения.

В приведенном ниже фрагменте кода я хотел бы иметь дело с любой ошибкой, которая происходит внутри try block, но она фиксирует ошибкутолько если это происходит в строке db.find.Если ошибка возникает внутри функции db.find, то есть в коде if or else, эта ошибка не фиксируется catch.

routes.get('/app/:id', (req, res) => {
    var downloadUrl = http://url;
    try {
        db.find({ _id: req.params.id }, function (err, subscriber) {            
            if (!subscriber.length) {
                res.render('info', { url: consts.baseUrl, message: consts.USERNOTFOUND });
            } else {
                res.render("app", { downloadUrl: downloadUrl });
            }
        });
    }
    catch (e) {
        logger.error(`${e.status || 500} - ${e.message} - /app`);
    }
});

Чтобы зафиксировать ошибку в if else block (предположим, что var subscriber не существует), мне нужно добавить еще один try catch такой:

routes.get('/app/:id', (req, res) => {
    var downloadUrl = consts.baseUrl + 'downloadapk/' + req.params.id;
    try {
        db.find({ _id: req.params.id }, function (err, subscriber) {            
            try{
                if (!suabscriber.length) {
                    res.render('info', { url: consts.baseUrl, message: consts.USERNOTFOUND });
                } else {
                    res.render("app", { downloadUrl: downloadUrl });
                }
            }catch(e){
                logger.error(`${e.status || 500} - ${e.message} - /app`);
            }
        });
    }
    catch (e) {
        logger.error(`${e.status || 500} - ${e.message} - /app`);
    }
});

I 'Я не уверен, что использование try-catch внутри другого является лучшим решением.Так как же я могу обработать любую ошибку внутри попытки, используя только один улов?

...