从sequelize-method返回基于promise的回调?

时间:2016-06-25 10:41:50

标签: javascript node.js sequelize.js

我的模型看起来像这样。

var sequelize = require('../database.js').sequelize,
    Sequelize = require('../database.js').Sequelize,

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((user) => {
                sequelize.Promise.all([
                    fbprofile.save(),
                    name.save(),
                    phone.save()
                ])
                .then((attributes) => {
                    user.addUserAttributes(attributes);
                });
            });
            return user;
        }
    }
});



module.exports = User;

我这样称呼它,并希望输出一些userdata:

app.get('/rider/create',
    (req, res) => {
        var User = sequelize.models.user,
        user = User.createRider(req.query);
        res.json(user);
    }
);

由于用户是在回调承诺.then中定义的,因此在我输出时它不会包含用户数据。回调完成后,如何等待首先返回数据?

1 个答案:

答案 0 :(得分:1)

您的createRider方法返回一个promise而不是一个值,因此您不能像user = User.createRider(req.query);那样分配它,但是您必须等待承诺完成。

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

需要在createRider返回的promise链的末尾返回用户对象。由于您返回的最后一个表达式是user.addUserAttributes(attributes),我假设user.addUserAttributes(attributes)也是一个在最后返回用户的承诺链。