首页 > 解决方案 > 如何仅使用一个捕获来处理尝试中的错误?

问题描述

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 来处理 try 中的任何错误呢?

标签: javascriptnode.jstry-catchnedb

解决方案


推荐阅读