如何传递承诺链中的variables?

我有这个承诺链。 在第二个承诺中,我需要用户,即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; }) } } });