gpt4 book ai didi

mysql - nodejs Promises操作中的事务管理

转载 作者:行者123 更新时间:2023-11-29 02:42:00 25 4
gpt4 key购买 nike

我需要在服务层实现事务管理。 Nodejs、sequelize 和 mysql 是我正在使用的技术。所有 crud 操作都从数据库层调用到服务层。在这里,我需要通过从 2 个单独的数据库层调用来在服务层中执行 2 个插入操作。而且我在我的项目中实现了 sequelize 事务管理。我的问题是,我无法在单个事务下管理 2 个插入操作。为什么因为,我需要从第一次成功插入中收集一些数据。这样我就可以调用“then”操作。当我调用然后操作时,事务已提交。那么应该如何使它成为可能。

common_database_Handler_file

this.insertData = function(collectionObject, collectionName) {
var collection = MODELS[collectionName];
return collection
.create(collectionObject);
};

table1_database_Handler_file

this.create = function (data1) {
return commonHandler.insertData(data1,"table1")
}

table2_database_Handler_file

this.create = function (data2) {
return commonHandler.insertData(data2,"table2")
}

service_layer_file

sequelize.transaction(function (t1) {

//saving data to table1
this.createUser = function (data1) {
table1Handler.create(data1)
.then(function (response) {
if (response) {
var data2 = {};
data2.id = response.id;

//saving data to table2
table2Handler.create(data2)
.then(function (data2) {
console.log("success);
}


}
}
.catch(error => {
new Error();
console.log("Failed");
}
}

});

最佳答案

事务必须传递到您在数据库处理程序中执行的操作中。

this.insertData = function(collectionObject, collectionName, t1) {
var collection = MODELS[collectionName];
return collection
.create(collectionObject, { transaction: t1 });
};

要实现上述,可以将事务从服务层传递到数据库层,作为函数的参数

同样在您上面的实现中,事务不是调用函数,而只是分配函数。这是实际外观的示例

this.createUser = function(data1) {
return sequelize.transaction(function (t1) {
return firstDBfunction(data1, t1)
.then(function(response){
return secondDBFunction(data2 , t1);
});
}).then(function(response){
//transaction successful
}).catch(function(error){
//transaction failed, so auto ROLLBACK
});
}

关于mysql - nodejs Promises操作中的事务管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49654053/

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