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ています。私はbizValuesにkのすべての値を設定しようとしています。
IIFEは魔法のように同期していませんが、まだ非同期で、ループが終了したときに「ある程度後で」完了します – adeneo
@adeneoどうすればこの方法に近づけることができますか? – RRP