节点Js(v7.10.0)+ mssql(3.3.0)
我想在事务中执行三个语句,但是当我尝试提交时,它返回错误:TransactionError:事务尚未开始。首先调用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));
尝试使用异步并等待,因为整个事情都是异步的。