我为我的应用程序使用了nodejs和mysql。我以这种方式进行数据库查询:
try {
myDB.query(SQL, object, (err, res) => {
if (err) throw err
...
}
} catch (err) {
console.log(err.message)
}
但是由于异步query
函数,这是行不通的。那么如何捕获那些可能在回调中发生的错误呢?请帮忙。
答案 0 :(得分:3)
您不能在带有回调的异步代码中throw
。您必须使用异步错误处理:
function makeQuery(callback) {
myDB.query(SQL, object, (err, res) => {
if (err) {
callback(err)
return
}
...
}
}
由调用者决定是否提供合适的回调函数,该函数需要使用(err, response)
或类似的东西。调用者还有责任拦截,处理或转发任何错误。
如果您使用Promise驱动的代码,则可以将.catch()
的{{1}}或async
函数与await
一起使用。 Sequelize是一个很好的Promise驱动的数据库驱动程序。
然后您将获得如下代码:
try
哪个显然更清洁。
答案 1 :(得分:0)
您可以使用以下示例:
try {
connection.query('SELECT * FROM ??',[Table], function (err) {
if (err) console.error('err from callback: ' + err.stack);
});
} catch (e) {
console.error('err thrown: ' + err.stack);
}
例如。如果“表格”不存在,您将得到响应:
'Table' doesn't exist
编辑:
@tadman说的是正确的if you use if (err) throw err
,您只会生成一个异常错误,而您失去了所需的东西。