#Sequelize findAll事件和forEach事件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 Object..我检查了user[0].dataValues
的内容,这正是我想要的。所以我想我错过了一些东西,误解了一些承诺:/我尝试了很多事情,但主要是我的问题是:我怎么能从我的控制台。log
event.getUsers
返回一个承诺-因此您正在分配events.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中返回一个promise给回调时。每次,在所有返回的承诺完成之前(即在所有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);});
左连接users表,其中关系为master。您可能想在then
中做一个映射,因为用户将被放置在.users
下,而不是.master
相关文章:
- 分派点击事件并保留击键修饰符
- 模糊事件的Javascript测试
- keyup事件处理程序更改焦点不适用于快速键入
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 如何使Javascript动态html表及其上的事件
- 使用类从一个标记中双击事件
- 如何在未直接触发的情况下停止事件
- 如何在elfinder插件(一个文件管理器插件)上获得上传前事件
- 对iPad上的点击事件反应缓慢
- 事件和状态
- Fancybox是否将Click事件静音
- 主干-不管怎样,检查事件以前是否绑定过
- 从控制器返回后Ajax启动事件激发
- 如何从画布上的某个移动事件中获取X和Y
- Jquery:未触发select事件
- JsFiddle上的鼠标事件不起作用
- 只覆盖箭头键滚动事件
- $window.ga在AngularJS事件中未定义
- cron作业与Javascript计时事件
- #Sequelize findAll事件和forEach事件getUser