【发布时间】:2017-04-28 23:13:31
【问题描述】:
假设有两个函数 A 和 B 都通过 connection.query(...) 方法调用 mysql DB。我正在使用 while 循环来遍历函数 A 中的响应。
再次,根据函数 A 的响应,在函数 B 中调用另一个 DB 请求并遍历它的结果,在内部的另一个 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 ')
})
})
【问题讨论】:
标签: javascript node.js express async-await