node js:将mysql查询结果添加到forloop中的json

时间:2017-05-09 08:21:27

标签: javascript mysql json node.js express

我正在尝试将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()是异步的,所以我怎么能 解决这个问题?

1 个答案:

答案 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
});