我的应用程序使用nodejs和mysql。我以以下方式执行db查询:
try { myDB.query(SQL, object, (err, res) => { if (err) throw err ... } } catch (err) { console.log(err.message) }
但由于异步,这是不工作的 query 功能。那么如何捕捉回调中可能发生的错误呢?请帮忙。
query
fkvaft9z1#
你不能 throw 包含回调的异步代码内部。必须使用异步错误处理:
throw
function makeQuery(callback) { myDB.query(SQL, object, (err, res) => { if (err) { callback(err) return } ... } }
由调用方提供适当的回调函数 (err, response) 或者类似的东西。调用者也有责任拦截、处理或转发所有错误。如果您使用承诺驱动的代码,您可以使用 .catch() 或者 async 具有的函数 await 在里面会有用的 try . sequelize是一个很好的promise驱动的数据库驱动程序。然后你有这样的代码:
(err, response)
.catch()
async
await
try
let result = await myDB.query(SQL, object)
显然要干净得多。
wyyhbhjk2#
您可以使用以下示例:
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”不存在,您将得到以下响应:
'Table' doesn't exist
编辑:@tadman所说的是正确的, if you use if (err) throw err ,您只会生成一个异常错误,并且会丢失所需的内容。
if you use if (err) throw err
2条答案
按热度按时间fkvaft9z1#
你不能
throw
包含回调的异步代码内部。必须使用异步错误处理:由调用方提供适当的回调函数
(err, response)
或者类似的东西。调用者也有责任拦截、处理或转发所有错误。如果您使用承诺驱动的代码,您可以使用
.catch()
或者async
具有的函数await
在里面会有用的try
. sequelize是一个很好的promise驱动的数据库驱动程序。然后你有这样的代码:
显然要干净得多。
wyyhbhjk2#
您可以使用以下示例:
例如。如果“table”不存在,您将得到以下响应:
编辑:
@tadman所说的是正确的,
if you use if (err) throw err
,您只会生成一个异常错误,并且会丢失所需的内容。