繁体   English   中英

如何在诺言链中传递变量?

[英]How to pass on variables in promise-chain?

我有这个承诺链。 在第二个承诺中,我需要用户,它由user.save返回。 我如何在不破坏承诺链的情况下得到它? 我需要它成为一条链,因为我需要最后一个保证将正确的属性返回到调用函数时的保证。

我调用这样的方法:

User.createRider(req.query).then((user) => {
    res.json(user);
});



User = sequelize.define('user', {},{
    classMethods: {
        createRider: function(params) {
            var values = [],
                userAttributes = sequelize.models.userAttributes,
                user = User.build(),
                name = userAttributes.build({name: 'name', value: params.name}),
                fbprofile = userAttributes.build({name: 'fbprofile', value: params.fbprofile}),
                phone = userAttributes.build({name: 'phone', value: params.phone});

            user = user.save()
                    .then(sequelize.Promise.all([
                            fbprofile.save(),
                            name.save(),
                            phone.save()
                        ])
                    )
                    .then((attributes) => {
                        user.addUserAttributes(attributes);
                        return user;
                    });
            return user;
        }
    }
});

如果我正确理解您的需求,可以尝试如下代码:

user = user.save()
    .then(savedUser => {
        return sequelize.Promise.all([
            fbprofile.save(),
            name.save(),
            phone.save()
        ])
        .then((attributes) => {
            console.log(savedUser); // this guy

            user.addUserAttributes(attributes);
            return user;
        });
    });

我认为您正在寻找这样的东西:

user = user.save();
let seq = user.then(sequelize.Promise.all([
    fbprofile.save(),
    name.save(),
    phone.save()
]));

return Promise.all([user,seq])
    .then((results) => result[0].addUserAttributes(results[1]));

我不确定,我是否完全了解您的代码/意图,但我认为您正在寻找某事。 像这样:

User = sequelize.define('user', {},{
    classMethods: {
        createRider: function(params) {
            var userAttributes = sequelize.models.userAttributes;
            var attrs = [
                {name: 'name', value: params.name},
                {name: 'fbprofile', value: params.fbprofile},
                {name: 'phone', value: params.phone},
            ];

            return sequelize.Promise.all(Array.prototype.concat(
                User.build().save(),
                attrs.map(o => userAttributes.build(o).save())
            )).then(([user, ...attributes]) => {
                user.addUserAttributes(attributes);
                return user;
            })
        }
    }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM