gpt4 book ai didi

javascript - Node Js - mssql 的 TransactionError (ENOTBEGUN)

转载 作者:太空宇宙 更新时间:2023-11-04 02:06:53 25 4
gpt4 key购买 nike

Node 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));

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

关于javascript - Node Js - mssql 的 TransactionError (ENOTBEGUN),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43876666/

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