【问题标题】:#Sequelize findAll events and forEach event getUser#Sequelize findAll 事件和 forEach 事件 getUser
【发布时间】:2015-07-28 18:50:38
【问题描述】:

我在使用 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 的内容,这正是我想要的.. 所以我想我错过了一些东西并误解了一些承诺:/ 我尝试了很多事情,但主要是我的问题是:如何从我的 console.log 中检索我的字符串

【问题讨论】:

    标签: javascript promise sequelize.js findall


    【解决方案1】:

    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.each 中的回调返回一个 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);});
    

    这左连接了关系为主的用户表。您可能想在then 中做一个映射,因为用户将被放置在.users 下,而不是.master

    【讨论】:

      猜你喜欢
      • 2017-11-06
      • 2020-12-06
      • 2020-10-12
      • 1970-01-01
      • 2017-03-09
      • 1970-01-01
      • 2020-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多