在Sequelize事务中使用循环和promise

我目前正在构build一个Nodejs,Express,Sequelize(w。PostgreSQL)应用程序,并且遇到了一些使用promise和transaction和loops的问题。

我想弄清楚如何在事务中使用for循环。 我试图通过成员列表循环,并在数据库中为每个成员创build一个新的用户。

我知道下面的代码是错误的,但它显示了我正在尝试做什么。

任何人都可以指向正确的方向吗?

var members = req.body.members; models.sequelize.transaction(function (t) { for (var i = 0; i < members.length; i++) { return models.User.create({'firstname':members[i], 'email':members[i], 'pending':true}, {transaction: t}).then(function(user) { return user.addInvitations([group], {transaction: t}).then(function(){}).catch(function(err){return next(err);}); }) }; }).then(function (result) { console.log("YAY"); }).catch(function (err) { console.log("NO!!!"); return next(err); }); 

你应该使用Promise.all

  var members = req.body.members; models.sequelize.transaction(function (t) { var promises = [] for (var i = 0; i < members.length; i++) { var newPromise = models.User.create({'firstname':members[i], 'email':members[i], 'pending':true}, {transaction: t}); promises.push(newPromise); }; return Promise.all(promises).then(function(users) { var userPromises = []; for (var i = 0; i < users.length; i++) { userPromises.push(users[i].addInvitations([group], {transaction: t}); } return Promise.all(userPromises); }); }).then(function (result) { console.log("YAY"); }).catch(function (err) { console.log("NO!!!"); return next(err); }); 

我不相信你需要catch交易后续交易,因为我认为它跳出了交易的瓶颈

对不起,格式化。 在移动。

Promise.all将等待所有承诺返回(或​​失败),然后再运行.thencallback将是每个数组的所有承诺数据

你需要使用内置的循环结构的蓝鸟随机附带sequelize:

 var members = req.body.members; models.sequelize.transaction(t => Promise.map(members, m => // create all users models.User.create({firstname: m, email: m, 'pending':true}, {transaction: t}) ).map(user => // then for each user add the invitation user.addInvitations([group], {transaction: t}) // add invitations )).nodeify(err); // convert to node err-back syntax for express