@AleDv

Почему не заполняется массив?

Здравствуйте. Есть такая задача: получаю на вход строку, в которой перечислены адреса. Строку нужно разбить на на отдельные адреса, получить координаты каждого адреса, и вывести точки на карту.

Я столкнулся с проблемой, при проходе по массиву с адресами и получая их координаты, конечный массив, куда я записываю координаты (myPoints) так и остаётся пустым.

var locations = params['locations'].split(' - '); // в каждой ячейке массива - адрес

    ymaps.ready(function(params){
        var myMap = new ymaps.Map('map', {
                    center: [58.602901, 49.668077],
                    zoom: 12
                });

        /* Настройки карты */
        myMap.behaviors.disable("scrollZoom");

        if(locations !== undefined){
            var myPoints = [],
                myPlacemark;

            console.log(locations);
            // Создаем коллекцию.
            for (key in locations) {
                var myGeocoder = ymaps.geocode(locations[key]);
                myGeocoder.then(
                    function (res) {
                        var adress = res.geoObjects.get(0).geometry.getCoordinates(); 
                        myPoints.push({ coords: adress });
                    }
                );
            }
            
            console.log(myPoints);

        }

    });


Если смотреть в самом for, то видно, что координаты получаются, записываются в массив, но как только цикл заканчивается, массив myPoints пустой.

На скрине видно, что сначала вызывается самый последний лог, а уже потом идёт сам цикл. В исходном массиве два адреса.
NfhEg4YE3-tisH-iJgc_qJOMgSzjjIbplKyJp0wk

Подскажите, где я допустил ошибку, взгляд замылился и найти не могу. Заранее спасибо.
  • Вопрос задан
  • 485 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Судя по myGeocoder.then, данные получаются асинхронно и, следовательно console.log(myPoints); выполняется до того, как они придут, поэтому массив и пуст. Это же подтверждает вывод консоли - сначала выводится пустой массив и только через некоторое время координаты.
Посмотрите решение этой задачи - там именно ваша ситуация рассматривается, ну и вообще прочитайте всю статью.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы