【发布时间】:2020-10-03 14:42:08
【问题描述】:
我有 2 个插入查询,我需要通过事务相互链接,因为有时其中一个查询可能会失败(这是设计使然),我使用 promise 来处理接下来发生的事情
new Promise(function(resolve , reject ) {
pool.getConnection(function(err, connection) {
connection.beginTransaction(function (err) {
if (err) {
reject(err.sqlMessage);
}
connection.query('INSERT INTO main_table SET ?', main_table_data, function (err, result) {
if (err) {
connection.rollback(function () {
reject(err.sqlMessage)
});
}
connection.query('INSERT INTO child_table SET ?', child_table_data, function (err, result) {
if (err) {
connection.rollback(function () {
reject(err.sqlMessage)
});
}
connection.commit(function (err) {
if (err) {
connection.rollback(function () {
reject(err.sqlMessage)
});
}
resolve(result.insertId);
});
});
});
});
});
})
.then(function (ID) {
console.log('/////////SUCCESS/////////////');
console.log(ID);
})
.catch(function (error) {
console.log('/////////ERROR/////////////');
console.log(error);
});
问题是我无法阻止它破坏整个代码,它执行捕获部分
.catch(function (error) {
console.log('/////////ERROR/////////////');
console.log(error);
});
但是promise里面的代码会继续运行而不是破坏……这部分特别是
resolve(result.insertId);
这是我的输出
/////////ERROR/////////////
invalid wallet
C:\wamp64\www\expbet\serv\node_modules\mysql\lib\protocol\Parser.js:437
throw err; // Rethrow non-MySQL errors
这是我在catch 中期望的输出,但在我得到之后
TypeError: Cannot read property 'insertId' of undefined
受此代码影响
resolve(result.insertId);
如果它已被拒绝,为什么它仍在运行解析代码?我做错了什么
第二个错误破坏了整个节点代码,如果这不是拒绝的工作方式,我需要抛出一个错误,我怎么能在不破坏整个代码的情况下做到这一点并在 promise catch 中捕获它?
【问题讨论】:
标签: javascript mysql node.js promise