#Sequelize findAll events 和 forEach event getUser
#Sequelize findAll events and forEach event getUser
我在使用 Sequelize 和 promise(主要是 promise)时遇到了一些问题。
例子 :
我想要我所有的事件和这些事件的主人。我做过类似的事情:
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)});
但是我得到了一个 Sequelize 对象。我检查了 user[0].dataValues
的内容,这正是我想要的。所以我想我错过了一些东西并且误解了一些承诺:/
我尝试了很多东西,但主要是我的问题是:如何从我的 console.log
中检索我的字符串
event.getUsers
return 是一个承诺 - 所以你正在分配 events.dataValues.master
(这是数组,而不是特定事件)承诺,而不是价值。
此外,在 getUsers
完成之前,您正在 returning 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);});
当您 return 对 promise.each 中的回调作出承诺时,then
(调用 next
)不会在所有 [=35= 之前被调用]ed 承诺已完成(即在所有 getUsers
调用完成之前。
我还更改了 where 子句以使用对象而不是字符串 :)
但是等等!我们可以做得更好!
models.events.findAll({
include: [
{
model: User,
through: {
where: {
relation: 'master'
}
}
}
]
}).then(function(events) {
return next(events);
}).catch(function(err) {next(err);});
这左加入关系为主的用户table。您可能想在 then
中做一个映射,因为用户将被放置在 .users
下,而不是 .master
我在使用 Sequelize 和 promise(主要是 promise)时遇到了一些问题。 例子 : 我想要我所有的事件和这些事件的主人。我做过类似的事情:
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)});
但是我得到了一个 Sequelize 对象。我检查了 user[0].dataValues
的内容,这正是我想要的。所以我想我错过了一些东西并且误解了一些承诺:/
我尝试了很多东西,但主要是我的问题是:如何从我的 console.log
event.getUsers
return 是一个承诺 - 所以你正在分配 events.dataValues.master
(这是数组,而不是特定事件)承诺,而不是价值。
此外,在 getUsers
完成之前,您正在 returning 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);});
当您 return 对 promise.each 中的回调作出承诺时,then
(调用 next
)不会在所有 [=35= 之前被调用]ed 承诺已完成(即在所有 getUsers
调用完成之前。
我还更改了 where 子句以使用对象而不是字符串 :)
但是等等!我们可以做得更好!
models.events.findAll({
include: [
{
model: User,
through: {
where: {
relation: 'master'
}
}
}
]
}).then(function(events) {
return next(events);
}).catch(function(err) {next(err);});
这左加入关系为主的用户table。您可能想在 then
中做一个映射,因为用户将被放置在 .users
下,而不是 .master