如何仅使用一个catch来处理尝试中的错误?

时间:2019-04-25 15:16:58

标签: javascript node.js try-catch nedb

我正在使用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`);
    }
});

我不确定在另一个内部使用try-catch是最佳解决方案。 那么,如何仅使用一个catch就可以解决尝试中的任何错误?

0 个答案:

没有答案