расслоения плотной Issue:метод async.waterfall Экспресс
Я использую express.js для извлечения данных из базы данных и отображать его в формате JSON.
Но при запуске кода в узле js отображается пустой массив (ganttresult), и когда я снова обновляю браузер, я получаю требуемый результат.
Итак, я использовал метод async.waterfall
для последовательного выполнения моего кода, но такая же проблема сохраняется.
Пожалуйста, советы
var ganttresult= new Array();
app.get('/get',cors(), function(request,response) {
async.waterfall([
function(result) {
connection.query("SELECT id FROM Gantt",function(err, rows) {
if (err) {
console.log('error in fetching ' + err);
}
else{
var all_id=rows;
for(var j=0;j<all_id.length;j++){
connection.query("SELECT id,tailName FROM Gantt where id= '"+all_id[j].id+"'",function(err, rows) {
if (err) {
console.log('error in fetching ' + err);
}
else{
var jsonString1=rows;
var set_id=jsonString1[0].id;
connection.query("SELECT itemId,name,start,end FROM GanttFlight where id= '"+set_id+"'",function(err, rows) {
if (err) {
console.log('error in fetching ' + err);
}
else{
var jsonString2=rows;
var gantt1=new Object();
gantt1.id=jsonString1[0].id;
gantt1.name=jsonString1[0].tailName;
var series = new Array();
if(jsonString2.length>0){
for(var i=0;i<jsonString2.length;i++){
var gantt2=new Object();
gantt2.item=jsonString2[i];
series.push(gantt2);
gantt1.series=series;
}
}
else{
gantt1.series=[];
}
ganttresult.push(gantt1);
}
});
}
});
}
var result= JSON.stringify(ganttresult);
ganttresult=[];
response.send('{\"data\":'+result+'}');
response.end();
}
});
}
], function(err) {
if(err){
console.log(err);
}
}
);
});
Два вопроса, которые я вижу первым, это цикл for вокруг асинхронных вызовов 'connection.query', которые используют async.map или async.forEach. Второй вопрос заключается в том, что способ использования async.waterfall является избыточным. Это не имеет никакого эффекта. – Bulkan
Должен ли я использовать метод async.waterfall для всех вложенных методов? – user67867