javascript - 在 Sequelize 的事务中使用循环和 promise

标签 javascript node.js express promise sequelize.js

我目前正在构建一个 Nodejs、Express、Sequelize (w. PostgreSQL) 应用程序,并且在将 Promise 与事务和循环一起使用时遇到了一些问题。

我正在尝试弄清楚如何在事务中使用 for 循环。我正在尝试遍历成员列表并在数据库中为每个成员创建一个新用户。

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

谁能指出我正确的方向?

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

我认为您不需要在 sequelize 交易中 catch,因为我认为它会跳出交易的 catch

抱歉格式化。在移动。

Promise.all 会在运行 .then 之前等待所有的 Promise 返回(或失败),而 .then 回调将是每个数组中的所有 Promise 数据

关于javascript - 在 Sequelize 的事务中使用循环和 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35705622/

相关文章:

javascript - imacros 无法在 Firefox 中正常工作

javascript - 获取我的帐户上传的带有特定标签的所有视频 Vimeo API

javascript - 在 Meteor 中导入 ES6 npm 模块时出现语法错误

javascript - 除了 API 之外,我应该为前端/后端使用两个单独的项目还是将它们合并为一个?

node.js - vscode 警告第一个参数未使用,但我使用后面的参数

javascript - Express.js 4 : How to access app. locals.<myvar> 在routes/index.js 中?

node.js - 如何在 feathers/express 中使用 webpack-dev-middleware?

javascript - 使用 CSS 自动排列 2 列文本

node.js - 实现express js时,Electron JS出现错误

javascript - 在 JavaScript 中实现递归的最佳方法?