JavaScript – 在Sequelize中的事务中使用循环和承诺

我目前正在构建一个Nodejs,Express,Sequelize(w.Postgresql)应用程序,并且遇到了一些使用promises以及事务和循环的问题.

我想知道如何在事务中使用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],{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);
    });

我不相信你需要在后续交易中捕获,因为我认为它会跳到交易的交易

对不起格式化.在移动.

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

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...