我是Node,KnexJS和promises的新手,我正在尝试构建一个查询项目的简单循环,然后添加与它们相关的图片。
我看了这个答案,虽然它教了一些我认为不适用于我的案例:Knex Transaction with Promises
到目前为止,我有这个:
router.get('/', function(req, res, next) {
knex('parts').where(req.query)
.orderBy('date_updated', 'DESC')
.then(function(data){
for (var k in data) {
knex('photos')
.select()
.where('part_id', data[k].id)
.then(function(photos){
data[k].photos = photos;
});
}
return data;
})
.then(function(data){
res.render('parts/index', { title: 'Express', data: data, query: req.query });
});
});
这显然是错误的,但我只是不知道这些情况下的方法。
答案 0 :(得分:2)
添加到IvanSF的答案中,您可以简单地将Promise.all()
包裹起来,然后res.send()
响应。像这样:
Promise.all(rows.map(row => {
return knex('table')
.select('*').where('row_id', row.id)
.then(table => {
row.table = table;
return row;
});
})).then(response => {
res.send(response);
});
答案 1 :(得分:1)
我使用.map来获得所需的效果。
.map(function(row) {
return knex('photos')
.select()
.where('part_id', row.id)
.then(function(photos) {
row.photos = photos;
return row;
});
})