Reputation: 2668
I have a function to make a transaction as below
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();
});
}
I pass data to it as
[{
"query": "some_query",
"queryData": {}
},
{
"query": "someother_query",
"queryData": {}
}]
So that array of queries it handles. But on error even if I call .rollback
, it is executing remaining queries. Please help me solve this issue.
NOTE: I am using mysql package
Thanks...
Upvotes: 0
Views: 84
Reputation: 9096
This is because rollback happens as an async function, but your code doesn't wait for it. Change your code to something like:
if (err) {
connection.rollback(function () {
return callback("Error in processing request commit");
});
}
else {
connection.end();
return callback(null, resultData);
}
Similar for all other parts of your code, like:
if (parsedQuery == false) {
connection.rollback(function () {
return callback("\nQuery :-> " + event.query + " <-: not Found!!");
});
}
else {
// continue rest of code here
}
This way the successful flow of your code won't execute in case of errors.
Upvotes: 1