2つの関数AとBの両方がconnection.query(...)メソッドを介してmysql DBを呼び出しているとします。私はwhileループを使用して、関数Aの応答を反復処理しています。NodeJS:関数内の関数です。どのように同期させるには?
また、関数Aからの応答で、関数Bで別のDB要求を呼び出し、その中で別のwhileループの結果を反復処理します。
非同期の問題の取得。これを解決する方法。
function A(){
while(){ //Say, Repeat 10 times
function B(){
while(){
some_result;
}
}
}
}
これは、実際のコードです:Nodejsで
app.get('/getmenu', function (req, res) {
connection.query('SELECT * from zaitoon_menutypes', function (err, rows) {
var output = [];
var i=0;
var j;
var main= rows[0].mainType;
var submenu=[];
var items=[];
//Iterate through complete menu types
while(i < rows.length){
//Do NOT MENU TYPE switch case
if (main == rows[i].mainType){
connection.query("SELECT * from zaitoon_menu WHERE type='type'" , function (err2, rows2, fields2){
console.log('*************************'+rows2.length);
items = [];
j=0;
while(j < rows2.length){
items.push(
{
"itemCode":rows2[j].code,
"itemName":rows2[j].name,
"itemPrice":rows2[j].price
}
);
j++;
}
console.log(items);
}); //End Connection
//Create Sub-menu
submenu.push(
{
"subType" : rows[i].subType,
"subName" : rows[i].subName,
"items" : items
}
);
if (i ==(rows.length-1)){
output.push(
{
"mainType":rows[i-1].mainType,
"mainName":rows[i-1].mainName,
"submenu": submenu
}
);
}
}
//SWITCH NEXT TYPE
else {
main = rows[i].mainType;
output.push(
{
"mainType":rows[i-1].mainType,
"mainName":rows[i-1].mainName,
"submenu": submenu
}
);
var submenu=[];
}
i++;
}
if (!err){
res.setHeader('Content-Type', 'application/json');
res.header("Access-Control-Allow-Origin", "*");
res.status(200).send(JSON.stringify(output))
}
else
res.status(500).send('Error ')
})
})