为什么我的try\catch不能捕获node.js中的错误

blmhpbnm  于 2023-05-28  发布在  Node.js
关注(0)|答案(1)|浏览(187)

我有一个代码块,周围有一个try catch。在try块中,我使用了一个名为JSONata的JSON查询库。在某些情况下,当一个不需要的字符串被错误地传递给库时,库会抛出一个错误。我的问题是我的catch块没有被命中,应用程序只是崩溃了?
下面是一些伪代码来解释发生了什么。问题是,当用户错误地将]放在id的末尾时,evaluate函数会抛出错误。我的假设是,当抛出错误时,我的catch块将拾取它并将错误消息发送到浏览器。我的app只是崩溃了。

try{
    let data = <some JSON data here>;
    let expression = jsonata("rows[userID=abc123]'])"
    expression.evaluate(data).then(result => {
        res.send(result)
    }    
}catch(err)
{ 
    res.send(err)
}
dl5txlt9

dl5txlt91#

正如Dave提到的,您可以使用.catch

try {
    let data = {};
    let expression = foo();
    expression.promiseFoo.then(result => {
        res.send(result)
    }).catch(err => {
        res.send(err);
    })
} catch (err) { 
    res.send(err)
}

另外,如果你使用async/await,你可以这样做:

router.get('/', async function(req, res, next) {
    try {
        let data = {};
        let expression = foo();
        const result = await expression.promiseFoo()
        res.send(result)
    } catch (err) { 
        res.send(err)
    }
});

相关问题