我正在尝试将for循环中的查询结果添加到JSON
function (req,res){
var result = [{id:1
},{id:2},{id:3}];
for(var i=0;i<result.length;i++){
//query run
collection.getImages(result[i].id,function (status,error,image) {
//add query result to json
result[i]['images']=image;
});
}
res.json(result);
}
但最终的result
不包含新添加的键值(即images
),因为collection.getImages()
是异步的,所以我怎么能
解决这个问题?
答案 0 :(得分:1)
您可以使用Promises来处理异步调用。然后,您可以使用Promise.all()
等待所有操作,然后再将结果发送回客户端。
var result = [
{id: 1}, {id: 2}, {id: 3}
];
var promises = [];
for (var i = 0; i < result.length; i++) {
//query run
promises.push(new Promise(function (resolve, reject) {
collection.getImages(result[i].id, function (status, error, image) {
if (error) {
reject(error);
} else {
resolve(image);
}
});
}));
}
Promise.all(promises).then(function (images) {
for (var i = 0; i < images.length; i++) {
result[i]['image'] = images[i];
}
res.json(result)
}).catch(function (error) {
// handle error
});