2017-05-09 93 views
0

我试图在for循环中添加查询结果以JSON节点JS:添加MySQL查询结果中的for循环

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不包含新添加的键值以JSON(即images )它是因为collection.getImages()是异步的,所以我怎样才能解决这个问题?

回答

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 
}); 
+1

的代码解释,我从来没有使用过的承诺 – Jabaa

+0

添加的代码片段 –

+0

我得到这个错误'类型错误:undefined' – Jabaa