Mysql 在事务中回滚后,其余查询正在运行事件

Mysql 在事务中回滚后,其余查询正在运行事件,mysql,sql,node.js,transactions,Mysql,Sql,Node.js,Transactions,我有一个功能,使交易如下 utils.sqlTransaction = function (event, callback) { let connection = mysql.createConnection(dbConfig); let queryItemPosition = 0; let queriesData = event; let resultData = []; function queryItem() { if (query

我有一个功能,使交易如下

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();
    });
}
所以它处理的查询数组。但如果出现错误,即使我调用
.rollback
,它也会执行剩余的查询。请帮我解决这个问题

注意:我使用的是软件包


谢谢…

这是因为回滚作为一个异步函数发生,但您的代码不会等待它。将代码更改为类似以下内容:

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
 }
if(parsedQuery==false){
连接.回滚(函数(){

return callback(“\nQuery:->”+event.query+”如果出现错误(并回滚),循环将继续。在
if(parsedQuery==false)中回滚后,应
返回
@Vatev,我正在返回回滚函数内部。如果我错了,请纠正我。是的,这会将您从回滚回调返回到无处。外部函数(queryItem)仅在
if(parsedQuery==false)
之后继续。谢谢@Vatev。这很有效。
 if (parsedQuery == false) {
       connection.rollback(function () {
           return callback("\nQuery :-> " + event.query + " <-:  not Found!!");
       });
 }
 else {
      // continue rest of code here
 }