[英]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.