我的模型看起来像这样。
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
中定义的,因此在我输出时它不会包含用户数据。回调完成后,如何等待首先返回数据?
答案 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)
也是一个在最后返回用户的承诺链。