Для работы скрипта использую API Яндекс карт
Обратите пожалуйста внимание на строки 35-40.
Я так понимаю, что запуск функции после then происходит только после загрузки ymaps.route. При этом во время запуска скрипта я понял что сначала проходит весь цикл, а потом для каждой итерации, по мере загрузки происходит запуск функции после then. В самой функции происходит расчет расстояния между двумя точками. Но так как эта функция запускается после прохождения всего цикла, я не могу узнать какое расстояние относится к какой комбинации адресов. Переменная i к моменту запуска функции равна -1. Подскажите пожалуйста, как можно решить эту проблему
Привожу код:
function init () {
// Создаем карту
var myMap = new ymaps.Map('map', {
center: [59.892450, 30.357102],
zoom: 15
});
//Задаем список адресов
var adr = new Array ("'Спб, ударников 1'", "'Спб, ударников 20'", "'Спб, оптиков 1'", "'Спб, оптиков 20'");
var comb = new Array;
var i,j;
i = adr.length-1;
//В следующем цикле заполняем список комбинаций адресов
while (i>=0) {
j = i-1;
while (j>=0){
comb[comb.length] = (i + '-' + j);
j--;
}
i--;
}
var lenComb = new Array;
i = comb.length - 1;
j = i + 1;
var pos, first, second;
//Для каждой комбинации выстраеваем маршрут на карте и пытаемся узнать длину маршрута
while (i>=0) {
pos = comb[i].indexOf('-');
first = comb[i].substring(0,pos);
second = comb[i].substring(pos+1,j);
ymaps.route([adr[first],adr[second]], {mapStateAutoApply:true}).then(
function(route) {
myMap.geoObjects.add(route);
Alert(route.getHumanLength());
//lenComb[i] = route.getHumanLength();
//alert(comb[i] + " " + lenComb[i]);
},
function(error) {
alert('Невозможно построить маршрут');
}
);
i--;
}
}
ymaps.ready(init);