2017-05-09 96 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