Javascript #续集findAll事件和forEach事件getUser

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

我在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)});
但我有一个续集对象。。我检查了
用户[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