我正在使用node-mysql将记录添加到数据库,但当要插入的记录是对象数组时,我面临挑战,我需要操作成为交易。我通过创建测试项目简化了我的问题,以更好地解释我的问题。Node JS在使用事务时将对象数组插入到mysql数据库
可以说,我有表users
和orders
和将要插入的数据看起来像这样
var user = {
name: "Dennis Wanyonyi",
email: "[email protected]"
};
var orders = [{
order_date: new Date(),
price: 14.99
}, {
order_date: new Date(),
price: 39.99
}];
我想先插入一个user
到数据库,并使用insertId
添加每个orders
的为那个用户。由于出现错误,我正在使用事务,我想要回滚整个过程。以下是我如何尝试使用node-mysql transactions来插入所有记录。
connection.beginTransaction(function(err) {
if (err) { throw err; }
connection.query('INSERT INTO users SET ?', user, function(err, result) {
if (err) {
return connection.rollback(function() {
throw err;
});
}
for (var i = 0; i < orders.length; i++) {
orders[i].user_id = result.insertId;
connection.query('INSERT INTO orders SET ?', orders[i], function(err, result2) {
if (err) {
return connection.rollback(function() {
throw err;
});
}
connection.commit(function(err) {
if (err) {
return connection.rollback(function() {
throw err;
});
}
console.log('success!');
});
});
}
});
});
但是我有迭代的orders
阵列上的问题,而无需调用内connection.commit
多次for循环
另一种选择是rx.js,我相信它提供了你所提及的功能。 – twicejr
我没有真正使用rxjs。我也需要努力。 rxjs observables是否有能力异步运行多个东西,并在订阅观察者完成时发布回调? – ardilgulez
是的,请看这里https://gist.github.com/twicejr/3d79c83041ba940a1ffea5202148b10b – twicejr