Javascript #续集findAll事件和forEach事件getUser
我在Sequelize和promise(主要是promise)方面遇到了一些问题。 例子: 我想要我所有的事件和事件的主人。我做过类似的事情:Javascript #续集findAll事件和forEach事件getUser,javascript,promise,sequelize.js,findall,Javascript,Promise,Sequelize.js,Findall,我在Sequelize和promise(主要是promise)方面遇到了一些问题。 例子: 我想要我所有的事件和事件的主人。我做过类似的事情: models.events.findAll().then(function(event) { events.forEach(function(event){ events.dataValues.master = event.getUsers({ where: ['UserRelationEven
models.events.findAll().then(function(event) {
events.forEach(function(event){
events.dataValues.master = event.getUsers({
where: ['UserRelationEvent.relation = "master"'],
joinTableAttributes: []
}).then(function(user){
return user[0].dataValues;
});
});
return next(events);
}).catch(function(err) {next(err)});
但我有一个续集对象。。我检查了用户[0]的内容。dataValues
这正是我想要的。。所以我想我错过了一些东西,误解了一些承诺:/
我尝试了很多方法,但主要的问题是:如何从控制台检索字符串。log
事件。getUsers
返回一个承诺-因此您正在分配事件。dataValues.master
(这是数组,不是特定事件)承诺,而不是值
另外,在getUsers
完成之前,您将返回next
,因为它们是异步发生的
像这样的东西应该有用
models.events.findAll().then(function(events) {
sequelize.Promise.each(events, function(event){
return event.getUsers({
through: {
where: { relation: 'master' }
},
joinTableAttributes: []
}).then(function(user){
event.dataValues.master = user[0];
});
}).then(function (events) {
return next(events);
});
}).catch(function(err) {next(err);});
当您在promise.each中向回调返回承诺时,在所有返回的承诺完成之前(即在所有getUsers
调用完成之前),不会调用then
(调用next
)。
我还将where子句更改为使用对象而不是字符串:)
但是等等!我们可以做得更好
models.events.findAll({
include: [
{
model: User,
through: {
where: {
relation: 'master'
}
}
}
]
}).then(function(events) {
return next(events);
}).catch(function(err) {next(err);});
此左侧连接关系为master的users表。您可能希望在中进行映射,然后
,因为用户将被放置在.users
下,而不是.master