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

标签 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 项目。由于 db.PostLikes.count() 调用的异步性,console.log 出现困惑。

如果有人可以向我展示一种使用 QueryChainer 来实现此目的的方法,那将会非常有帮助。

最佳答案

致正在寻找此问题解决方案的任何人:

我在 SequelizeJS 维护者之一的帮助下解决了这个问题 on Github 。我的解决方案的一部分是使用“bluebird”库来实现 Promise。可能可以使用不同的库,但我还没有使用任何其他库测试我的代码。

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

关于javascript - 循环查询结果并使用 QueryChainer 对每个结果运行另一个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23771493/

相关文章:

javascript - 为什么这些值彼此不相等?

JavaScript 代码不执行 : IsFormValid()

MySQL-基于多列输出 "other"列

sequelize.js - 将 where 语句与今天的日期相续

node.js - Sequelize.js - 保留具有关联的模型

javascript 和 div,在 div 中创建图像和段落。

c# - 普遍存在的 SQL 德语变音符号问题

mysql - 如何在 MySQL 表更新后触发操作?

node.js - Sequelize 计算字段 - 虚拟

javascript - 与用户创建内容的数据绑定(bind)/交互