gpt4 book ai didi

mysql - 事务中回滚后剩余的查询正在运行事件

转载 作者:行者123 更新时间:2023-11-29 09:53:29 24 4
gpt4 key购买 nike

我有一个进行交易的功能,如下所示

utils.sqlTransaction = function (event, callback) {

let connection = mysql.createConnection(dbConfig);
let queryItemPosition = 0;
let queriesData = event;
let resultData = [];
function queryItem() {
if (queryItemPosition > (queriesData.length - 1)) {
connection.commit(function (err) {
if (err) {
connection.rollback(function () {
return callback("Error in processing request commit");
});
}
connection.end();
return callback(null, resultData);
});
} else {
let queryData = queriesData[queryItemPosition] ? queriesData[queryItemPosition].queryData : {};
let parsedQuery = utils.getQuery(queriesData[queryItemPosition].query, queryData);

if (parsedQuery == false) {
connection.rollback(function () {
return callback("\nQuery :-> " + event.query + " <-: not Found!!");
});
}

connection.query(parsedQuery, function (err, result) {
if (err) {
connection.rollback(function () {
return callback(err);
});
}
resultData.push(result);
queryItemPosition++;
queryItem();
})

}
}

connection.beginTransaction(function (err) {
if (err) { return callback(err); }
queryItem();
});
}

我将数据传递给它

[{
"query": "some_query",
"queryData": {}
},
{
"query": "someother_query",
"queryData": {}
}]

它处理的查询数组。但出现错误时,即使我调用 .rollback,它也会执行剩余的查询。请帮我解决这个问题。

注意:我正在使用 mysql

谢谢...

最佳答案

这是因为回滚作为异步函数发生,但您的代码不会等待它。将您的代码更改为:

if (err) {
connection.rollback(function () {
return callback("Error in processing request commit");
});
}
else {
connection.end();
return callback(null, resultData);
}

与代码的所有其他部分类似,例如:

 if (parsedQuery == false) {
connection.rollback(function () {
return callback("\nQuery :-> " + event.query + " <-: not Found!!");
});
}
else {
// continue rest of code here
}

这样,如果出现错误,代码的成功流程将不会执行。

关于mysql - 事务中回滚后剩余的查询正在运行事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54346381/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com