2013-04-01 6 views
0

У меня есть эта функция, которая вызывается при нажатии кнопки. Функция создает маркер в предопределенной позиции. Затем я использую службу высот для данной точки. Когда я нажимаю кнопку, предупреждающее сообщение (я его там поместил для диагностики) отображает «undefined», а затем появляется маркер (на самом деле маркер должен появиться до). Я старался изо всех сил определить источник проблемы, но напрасно. Кто-нибудь может мне помочь? Благодарю.Служба регистрации изображений Google

function buttonClicked() { 
    addNode(someLat, someLong); 
    alert(getElev(markers[0])); 
    } 

    function addNode(lat, lng) { 
     var LatLng = new google.maps.LatLng(lat, lng); 
     var marker = new google.maps.Marker({ 
     position: LatLng, 
     }); 
     marker.setMap(map); 
     markers.push(marker); 
    } 

    function getElev (marker) { 
     var ht = 0; 
     var locations = []; 
     var clickedLocation = marker.getPosition(); 
     locations.push(clickedLocation); 
     var positionalRequest = { 
     'locations': locations 
     } 

     elevator.getElevationForLocations(positionalRequest, function (results, status) { 
      if (status == google.maps.ElevationStatus.OK && results[0]) 
       ht = results[0].elevation; 
     }); 
     return ht; 
    } 

ответ

1

Добавить предупреждение здесь, и оно должно работать. Функция внутри getElevationForLocations не встречается в getElev, но называется асинхронно. поэтому ht не установлен в getElev.

elevator.getElevationForLocations(positionalRequest, function (results, status) { 
     if (status == google.maps.ElevationStatus.OK && results[0]){ 
      ht = results[0].elevation; 
      alert(ht); 
     } 
    }); 
+0

Большое спасибо, Фред! – Imran

+0

Мне было интересно, хотя. Есть ли способ, которым мы ожидаем завершения асинхронного вызова до того, как мы покинем getElevationForLocations? – Imran

-1
altitude = 0; // Declared with out "var" make it superglobal 
function buttonClicked() { 
addNode(someLat, someLong); 
alert(getAltitude()); 
} 

function addNode(lat, lng) { 
    var LatLng = new google.maps.LatLng(lat, lng); 
    var marker = new google.maps.Marker({ 
    position: LatLng, 
    }); 
    marker.setMap(map); 
    markers.push(marker); 
} 

function getElev (marker) { 
    var locations = []; 
    var clickedLocation = marker.getPosition(); 
    locations.push(clickedLocation); 
    var positionalRequest = { 
    'locations': locations 
    } 

    elevator.getElevationForLocations(positionalRequest, function (results, status) { 
     if (status == google.maps.ElevationStatus.OK && results[0]) 
      setAltitude(results[0].elevation); 
    }); 
} 

//getters and setters for altitude 
function setAltitude(a){ 
    altitude = a; 
} 
function getAltitude(){ 
    return altitude; 
} 
+0

Вы действительно должны объяснить, почему это решает проблему OP. –

Смежные вопросы