nodejs错误:当mysql查询参数和null错误ocurrs时,无法捕获
在中尝试... catch
,当 art
是 null
(而不是obj)时,当使用 QUERY ,它将发生无法捕获的错误,并且应用程序崩溃。
为什么可以捕获此错误?
以及
如何解决此问题以捕获,请避免应用程序崩溃?
/*
insert db
*/
function addGrabsArticle(art) {
return new Promise((resolve, reject) => {
pool.getConnection((err, conn) => {
if (err) {
resolve(null);
return;
}
let sql = "insert into `archives`(`title`,`pubdate`,`type`,`cat`,`seokey`,`seodesc`,`content`,`images`,`isdel`,`ispublish`) values(?,?,?,?,?,?,?,?,?,?)";
let params = [
art.title,
Date.now() + "",
1, // article
2, // coding
art.seokey,
art.seodesc,
art.content,
JSON.stringify(art.images),
0,
0
];
conn.query(sql, params, (err, result) => {
pool.releaseConnection(conn);
if (err) {
resolve(null);
return;
}
if (result.affectedRows > 0) {
resolve(result.insertId);
}
});
});
});
}
try {
var artObj = grabUtils.deepCopy(artlist[i]);
var art = await grabUtils.getContent(artObj, contentProc);
var insertId = await addGrabsArticle(art);
await grabUtils.sleep(2000);
} catch (err) {
console.log(err);
continue;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是因为您正在解决诺言而不是拒绝诺言。顾名思义,解决方案会假设一切正常,当您拒绝承诺时,这将转移到您的捕获块上,因为它会在内部抛出一个例外,最终被捕获在渔获块中。
建议您在此处阅读有关承诺的更多信息 -
This is because you are resolving your Promise instead of Rejecting it. Resolve as the name suggests would assume everything was Ok, when you reject from your Promise this would go to your catch block as it would internally throw an Exception which is eventually caught in the Catch block.
Would recommend reading more about Promises here - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise