#Sequelize findAll events和forEach event getUser

use*_*320 2 javascript findall promise sequelize.js

我对Sequelize和承诺(主要是承诺)有一些问题.示例:我想要所有活动以及此活动的主人.我做过类似的事情:

 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)});
Run Code Online (Sandbox Code Playgroud)

但在那里我得到了一个Sequelize对象..我检查了我的内容,user[0].dataValues这正是我想要的......所以我想我错过了一些东西并且误解了一些承诺:/我尝试了很多东西,但主要是我的问题是:我怎样才能找回我的字符串来自我的console.log

Jan*_*ier 7

event.getUsers返回一个promise - 所以你要分配events.dataValues.master(这是数组,而不是btw的特定事件)promise,而不是value.

此外,nextgetUsers完成之前,您将返回,因为它们发生异步

这样的事情应该有效

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);});
Run Code Online (Sandbox Code Playgroud)

当你在promise.each中返回对回调的promise时,在所有返回的promise完成之前(即在所有调用完成之前)都没有调用then(调用next)getUsers.我也改变了where子句来使用对象代替的字符串:)

可是等等!我们可以做得更好!

models.events.findAll({
    include: [
        {
            model: User,
            through: {
                where: {
                    relation: 'master'
                }
            }
        }
    ]
}).then(function(events) {
    return next(events);
}).catch(function(err) {next(err);});
Run Code Online (Sandbox Code Playgroud)

这左边连接关系为master的users表.你可能想在中做一个地图then,因为用户将被放置在.users,而不是.master