Node Js - TransactionError with mssql (ENOTBEGUN)



Node Js (v7.10.0( + mssql (3.3.0(

我想在一个事务中执行三个语句,但是当我尝试提交时,它返回一个错误:事务错误:事务尚未开始。首先调用begin((。

       var conn = new sql.Connection(dbConfig);
       conn.connect().then(function() {
          test();
       }).catch(function(err) {
          console.log(err);
       });        
    function test() {
       var mssqlTransaction = new sql.Transaction(conn);
        mssqlTransaction.begin(function(err) {
             var sqlInsert = "My Insert";
             var request1 = new sql.Request(mssqlTransaction);
             request1.query(sqlInsert, function(err, recordset) {
                if (err != undefined && err.length == 0) {
                    erros.push(err);
                }                   
             });
             var sqlDelete = "My Delete";
             var request2 = new sql.Request(mssqlTransaction);
             request2.query(sqlDelete , function(err, recordset) {
                if (err != undefined && err.length == 0) {
                    erros.push(err);
                }                   
             });
             var sqlUpdate = "My Update";
             var request3 = new sql.Request(mssqlTransaction);
             request3.query(sqlUpdate , function(err, recordset) {
                if (err != undefined && err.length == 0) {
                    erros.push(err);
                }                   
             });
             mssqlTransaction.commit(function(err) {
                 console.log('Error in commit:'+err);
             });
        });
    }

这应该是评论,但我没有足够的声誉。

您的 request1 语句不等待事务开始并继续执行事务,以便等待事务开始使用

await new Promise(resolve => mssqlTransaction.begin(resolve));

并且要提交事务,您也可以使用

await new Promise(resolve => mssqlTransaction.commit(resolve));

尝试使用 asyncawait,因为整个事情都是异步的。

最新更新