我无法循环遍历结果集,然后为每个结果运行另一个查询以附加一些其他数据。
我查看了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实现此目的的方法,那将是非常有用的。
答案 0 :(得分:2)
无论是谁在为这个问题寻找解决方案:
我在SequelizeJS的一位维护者的帮助下通过on Github解决了这个问题。我的解决方案的一部分是使用'bluebird'库进行Promises。可能使用不同的库,但我还没有用其他任何库来测试我的代码。
Here's a Gist of my code.我希望这有助于任何遇到此问题的人:)