Показать сообщение отдельно
  #1 (permalink)  
Старый 09.03.2016, 12:07
Новичок на форуме
Отправить личное сообщение для Kondrv Посмотреть профиль Найти все сообщения от Kondrv
 
Регистрация: 09.03.2016
Сообщений: 5

Не могу передать данные в функцию
Для работы скрипта использую 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);

Последний раз редактировалось Kondrv, 09.03.2016 в 12:54.
Ответить с цитированием