循环查询结果并使用QueryChainer为每个结果运行另一个查询

时间:2014-05-20 23:15:15

标签: javascript database sequelize.js

我无法循环遍历结果集,然后为每个结果运行另一个查询以附加一些其他数据。

我查看了Sequelize.js的Github问题,发现可以use QueryChainer to achieve this。但是,既然我还是新手,我还是没能弄明白怎么做。我的for循环的执行异步发生,导致在没有附加数据的情况下发送响应。

以下是我现在正在做的事情:

// in blogs.js
var db = require('../models')

exports.findPosts = function(req, res) {

  if (req.User) {

    req.User.getPosts({
      include: [
        { model: db.User, attributes: ['displayName', 'profilePicture'] },
        { model: db.Game, attributes: ['name'] }
      ]
    }).success(function(posts) {

      console.log('Starting the loop...')

      for (var i in posts) {

        db.PostLikes.count({ where: { PostId: i.id } }).success(function(likes) {

          i.Likes = likes
          console.log('Fetched Likes for post #' + i.id)

        })

      }

      console.log('This should appear last!')
      res.json(posts)

    }).error(function(err) {

      console.log(err)
      res.send(404)

    })

  } else {
    res.send(404)
  }
}

上述代码导致发送的响应没有在每个Likes项目后附加post属性。由于console.log电话的异步性质,db.PostLikes.count()出现了故障。

如果有人能告诉我使用QueryChainer实现此目的的方法,那将是非常有用的。

1 个答案:

答案 0 :(得分:2)

无论是谁在为这个问题寻找解决方案:

我在SequelizeJS的一位维护者的帮助下通过on Github解决了这个问题。我的解决方案的一部分是使用'bluebird'库进行Promises。可能使用不同的库,但我还没有用其他任何库来测试我的代码。

Here's a Gist of my code.我希望这有助于任何遇到此问题的人:)