Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Цикл завершается не дожидаясь выполнения функции (https://javascript.ru/forum/jquery/49446-cikl-zavershaetsya-ne-dozhidayas-vypolneniya-funkcii.html)

leonoff 13.08.2014 15:15

Цикл завершается не дожидаясь выполнения функции
 
Всем кто заглянул спасибо и привет.
Нужна свежая голова, т.к. моя уже от этой жары кипит.

Проблема вот в чем. Данные с консольки:
Цикл № 0:
Координаты на выходе 43.922311 ,56.300127

Цикл № 1:
Координаты на выходе 0
Координаты внутри функции 59.43996,32.025632

Т.е. получается, что цикл продолжает свое выполнение не дожидаясь выполнения function (res), и, соответсвенно, переменная coordinates равна 0.

Или я не правильно все понял. Не пойму в чем дело. Посоветуйте что-нибудь.

$.ajax({
	url:'clientsBase.csv',
	async: false,
	contentType: "application/json; charset=utf-8",
	success: function(data){
			var rows = data.split("\n");
			var src_res='';
			for	( var i in rows )	{
				var colls=rows[i].split(";");//или другой символ разделитель
				console.log('Цикл № ' + i);
				
				// Узнаем, содержаться ли координаты в clientsBase.csv
				coordinates=0;
				if (colls[6] == undefined) {
				
					//Координат в файле нет, ищем координаты по городу, улице и дому
					var myGeocoder = ymaps.geocode(colls[2] + ', ' + colls[3] + ' ' + colls[4]).then(
				
    					function (res) {
        					coordinates = res.geoObjects.get(0).geometry.getCoordinates();
							console.log('Координаты внутри функции ' + coordinates);
    					},
    					
						function (err) {
        					alert('Ошибка');
    					}
						
				)
			
				} else {
				
				//Координаты в файле имеются. Вставляем их из массива в переменную
				coordinates = colls[5] + ',' + colls[6];
				
				}
			
				console.log('Координаты на выходе ' + coordinates);
			
				// Устанавливаем координаты и содержимое балуна
				myPlacemark = new ymaps.Placemark( [coordinates], {
                    // Свойства 
					// балуна
                    balloonContentHeader: '<div style="color:#ff0303;font-weight:bold">'+colls[1]+'</div>',
                    balloonContentBody: '<div style="font-size:12px;"><strong>Адрес:</strong> '+colls[2]+'<br /><strong>Телефон:</strong> '+colls[3]+'</div>'              
                	}, 
					
					{
                    // Опции
					// балуна
                    preset: 'twirl#carIcon'
            	});
			

             	myCollection.add(myPlacemark);
			
				$('#menu').append('<li>'+'<a href="#" onClick="return go_point('+colls[0]+");"+'\">'+colls[1]+'</a></li>');
			
			}
			
		myMap.geoObjects.add(myCollection);
			
		myMap.setBounds(myCollection.getBounds());
			
	}
	
});

Aetae 13.08.2014 15:29

Два слова: асинхронный запрос.

leonoff 13.08.2014 16:02

Цитата:

Сообщение от Aetae (Сообщение 325664)
Два слова: асинхронный запрос.

Ну елки-палки. Конечно, поскольку запрос асинхронный нужно дождаться обработки результата.
А я код копаю, говорю ж нужна свежая голова. Спасибо (20 слов) :)

Я думал, что .then() ждет.


Часовой пояс GMT +3, время: 15:51.