說有兩個函數A和B都通過connection.query(...)方法調用mysql數據庫。我使用while循環通過功能A.響應迭代NodeJS:函數內部函數。如何使它同步?
再次,從功能的響應,調用函數B另一個數據庫的請求,並通過它的結果內的另一個while循環迭代。
獲取異步問題。如何解決這個問題。
function A(){
while(){ //Say, Repeat 10 times
function B(){
while(){
some_result;
}
}
}
}
這是實際的代碼:
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 ')
})
})