Я использую библиотеку async в этом проекте. Одна функция (скопированная ниже) включает вложенный цикл для построения 2D-массива. Обратный вызов вызывается до того, как массив будет полностью построен. Мне бы очень хотелось понять, почему это происходит и узнать больше о лучших практиках. Каков наилучший способ решить эту проблему?Обратный звонок перед завершением итерации
function getStopTimesForTrips(cb) {
timeTable.listOfTripIds.forEach(function(id){
retrieveTimesByTrip(id, function(err, st){
var tempArray = [];
st.forEach(function(st){
tempArray.push(st.arrival_time);
});
timeTable.stopTimes.push(tempArray);
});
});
// cb(null, timeTable); <- This line fires the callback before we finish building the array.
setTimeout(function(){cb(null, timeTable);},2500); // This effective solution is poor form. What's the correct way to solve this issue?
}
Вы даже не используете методы 'async', предоставляемые библиотекой. – choz
Похож на цикл асинхронных функций, но вы называете обратный вызов, не дожидаясь, пока все они будут вызваны. –