У меня была проблема при попытке выполнить асинхронную функцию в JavaScript. В основном у меня есть pointArr для хранения координат вдоль маршрута. Затем я получил moveNext(), который берет в каждую координату вдоль маршрута и заносит на карту. Затем внутри moveNext() я получил еще один массив, который является busList. Если координаты по маршруту соответствуют координатам busList, то я минус totalBusStopLeft на единицу. Вот код, где я называю MoveNext():JavaScript Asynchronous Loop не возвращает результаты
getAllBusLoc(function(busList) {
//At first I set the totalBusLeft by the length of busList which is 13 in this case
var totalBusLoc = busList.length;
document.getElementById("busStopLeft").innerHTML = totalBusLoc;
timeout = 1500;
pointArr.forEach(function(coord,index){
setTimeout(function(){
moveNext(coord.x, coord.y, index, busList, totalBusLoc);
}, timeout * index);
});
});
function moveNext(coordx, coordy, k, busList, totalBusLoc){
//pointToCompare is the coordinates in the route but not the coordinates of busList
var pointToCompare = coordx + "," + coordy;
//If the coordinates in route matches the coordinate in busList, I minus busLeft by one
if(busList.indexOf(pointToCompare) > -1){
parseFloat(totalBusLoc--);
document.getElementById("busStopLeft").innerHTML = totalBusLoc ;
}
//Code to Add marker
}
Однако, с этим кодом, мой Html компонент busStopLeft продолжают показывать 13, который является оригинальным totalBusLoc. Интересно, как я мог вернуть минус totalBusLoc из moveNext(). Есть идеи?
Я попытался использовать async.eachSeries, но когда я импортировал этот async.js, он дал мне еще одно сообщение об ошибке, которое произошло с Dojo. Спасибо заранее.
Вот та часть, где я пытался использовать функцию обратного вызова:
totalBusLoc = busList.length;
document.getElementById("busStopLeft").innerHTML = totalBusLoc;
timeout = 1500;
pointArr.forEach(function(coord,index){
setTimeout(function(busLeft){
moveNext(coord.x, coord.y, index, busList, totalBusLoc);
}, timeout * index);
});
});
function moveNext(coordx, coordy, k, busList, totalBusLoc, callback){
var pointToCompare = coordx + "," + coordy;
if(busList.indexOf(pointToCompare) > -1){
parseFloat(totalBusLoc--);
document.getElementById("busStopLeft").innerHTML = totalBusLoc;
callback(totalBusLoc);
}
}
Во втором в moveNext вы вызываете обратный вызов, но не передаете обратный вызов, поэтому его сбой –
@MukeshAgarwal Итак, есть ли у вас какие-либо идеи, как это исправить? – hyperfkcb
В 'moveNext()' вы только обновляете локальную переменную (параметр) 'totalBusLoc', переменную, которая исчезает, когда функция заканчивается. Вам нужно будет удалить этот параметр и вместо этого определить его как переменную в области содержимого, чтобы сохранить ее значение между вызовами 'moveNext()'. Или прочитайте и проанализируйте '.innerHTML' из элемента '' busStopLeft '' и increment *, что *. (Кстати, вызывая 'parseFloat()' в этой строке: 'parseFloat (totalBusLoc -);' ничего не делает, потому что вы не используете возвращаемое значение.) – nnnnnn