Я подсчитываю кратчайший путь к точке назначения из разных точек происхождения с помощью google maps api. Я решил сделать это так: (подсчитывайте каждую пару точек, чем сохраняйте результаты в массиве, а затем проверьте в конце, что лучше). Но у меня проблема с обратным вызовом - потому что комментарии говорят, что массив всегда равен нулю, потому что этот код выполняется перед всеми запросами, чтобы подсчитать длину маршрута.JavaScript - обратный вызов - ожидание завершения нескольких функций
function foo(){
var directionsService = new google.maps.DirectionsService();
var destination = new google.maps.LatLng(x,y);
var arrayOfRes= [];
for(var index in originPoints){
var request = {
origin:originPoints[index].marker.position,
destination:destination,
travelMode: google.maps.TravelMode.DRIVING
};
directionsService.route(request, function(result, status) {
if (status == google.maps.DirectionsStatus.OK) {
var res = {};
res.length = result.routes[0].legs[0].distance.value;
res.index = index;
res.result = result;
arrayOfRes.push(res);
}
});
}
//here arrayOfRes.length is always 0
if(arrayOfRes.length>1)
{
var bestResult = arrayOfRes[0];
for(var i = 1; i < arrayOfRes.length; i++)
{
if(bestResult.length > arrayOfRes[i])
bestResult = arrayOfRes[i];
}
console.log("Best is" + bestResult.length);
}
else if(arrayOfRes.length ==1)
{
var bestResult = arrayOfRes[0];
}
}
Как написать функцию с обратным вызовом, чтобы она дождалась завершения всех запросов?
dude..common..you можете обрезать вопрос .. сделайте это короче, вы определенно получите больше ответов, когда попросите что-то более простым способом. –
На этот вопрос был дан ответ много раз. Сделайте все возможное и попытайтесь найти ответ. – putvande
Вы, вероятно, должны быть знакомы с обещаниями, обратными вызовами и асинхронным JavaScript в целом. –