【问题标题】:node js:add mysql query result to json in forloop节点js:在for循环中将mysql查询结果添加到json
【发布时间】:2017-10-07 11:03:35
【问题描述】:

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

【问题讨论】:

    标签: javascript mysql json node.js express


    【解决方案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
    });
    

    【讨论】:

    • 我收到了这个错误TypeError: Cannot set property 'images' of undefined
    猜你喜欢
    • 2018-08-02
    • 2017-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    • 2015-07-26
    • 2012-12-10
    相关资源
    最近更新 更多