nodejs错误:当mysql查询带有参数时,出现null错误,无法捕获



try...catch中,当artnull(不是obj)时,用query插入db时,会出现无法捕获的错误,导致应用程序崩溃。

为什么可以捕获这个错误?

如何修复这个被捕获,避免应用程序崩溃?

/*
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;
}

这是因为你正在解决你的承诺,而不是拒绝它。顾名思义,Resolve会假设一切正常,当你拒绝Promise时,它会进入catch块,因为它会在内部抛出一个异常,最终在catch块中捕获。

// reject here
if (err) {
reject("Connection Failed");
return;
}
// Reject wherever you are handling an error instead of resolve()

建议在这里阅读更多关于Promises的内容- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

最新更新