API Карт Google - Как заставить код ждать ответа? - PullRequest
0 голосов
/ 23 октября 2011

Я создал функцию, которая будет создавать массив маркеров с местами, полученными с помощью API Places.Параметр type используется для типа места, а значок используется для значка маркера.

function setPOIMarkerArray(type, icon) {

var array = new Array();

var request = {
    location: map.getCenter(),
    radius: '2000',
    types: [type]
};

var service = new google.maps.places.PlacesService(map);
service.search(request, function(results, status) {
    if (status == google.maps.places.PlacesServiceStatus.OK) {  
        for (i in results) {
            place = results[i];

            var marker = new google.maps.Marker({
                icon: icon,
                position: new google.maps.LatLng(place.geometry.location.lat(), place.geometry.location.lng())
            });

            google.maps.event.addListener(marker, 'click', function() {
                var content = '<img class="left-arrow-grocery" src="/img/leftArrow.png"><div class="grocery-infobox">' + place.name + '<br/>' + place.vicinity + '</div>';
                ib.setContent(content);
                ib.open(map, marker);
            });

            array.push(marker);

        }

        return array;       

    }

});
}

Когда я вызываю этот код, используя $(function(){});, в котором я настраиваю свою карту и другие вещи, Я вызываю var groceryStores = setPOIMarkerArray('grocery_or_supermarket','grocery.png'), но массив groceryStores становится пустым, если я console.log (groceryStores)

Если я console.log(array) внутри setPOIMarkerArray, он действительно показывает результаты.

Я считаю,это связано с тем, что код не ожидает ответа от API Google.Что я могу сделать, чтобы это исправить, или в чем проблема?Спасибо

1 Ответ

0 голосов
/ 23 октября 2011

Функция search выполняется асинхронно, поэтому к array будет добавлен маркер только после получения ответа.Браузер выполняет этот запрос в фоновом режиме и не ждет его ответа, поэтому массив становится пустым сразу после вызова функции.

РЕДАКТИРОВАТЬ: вам не нужно ничего делать для преодоленияЭто.Он делает то, что должен делать.Однако, если вы хотите получать уведомления о том, что ответ возвращается из поиска, вы можете добавить вызов функции в ваш обратный вызов.

Пример. Отображение предупреждения при добавлении маркера.

function marker_added() { alert('marker added'); }

//callback code here...
array.push(marker);
marker_added();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...