我在for循環中執行sql查詢,執行查詢的函數是異步操作。所以我將這個異步操作封裝在一個即時調用函數中。在for循環中執行查詢
for(var k in bizValuesObj){
if(existingCountries.hasOwnProperty(bizValuesObj[k]["country"])){
country_id = existingCountries[bizValuesObj[k]["country"]];
}
var productName = bizValuesObj[k]["product"];
var bizTypes = bizValuesObj[k]["bizTypes"];
var getproductIdQuery = "SELECT `id` FROM `product` WHERE name = ? AND country_id = ?";
(function(){
connection.query(getproductIdQuery, [productName, country_id], function(err, result){
if(err){
console.error("Error getting product id:", err.stack);
}
product_id = result[0].id;
for(var j= 0; j < bizTypes.length; j++){
var temp = [];
temp.push(bizTypes[j]);
temp.push(country_id);
temp.push(product_id);
bizValues.push(temp);
}
});
})(k);
}
此刻,我不清楚爲什麼bizValues沒有得到填充,直到主循環結束。我試圖爲每個k值填充bizValues。
IIFE不會神奇地使它同步,它仍然是異步的,並在「稍後一段時間」完成,最有可能當循環完成時 – adeneo
@adeneo我該如何解決這個問題? – RRP