2013-12-14 3 views
0

У меня есть функция в контроллере карты для преобразования адреса в google.maps.latlng, и я хочу вернуть это значение, но моя функция ничего не возвращает. Я думаю, это потому, что значения меняются внутри другой функции, но я не могу понять, как это решить.Вспомогательная функция контроллера ничего не возвращает

addressToLatLng: function(address) { 
    var geocoder = new google.maps.Geocoder(), lat, lng, latlng; 
    geocoder.geocode({ 'address': address }, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      lat = results[0].geometry.location.lat(); 
      lng = results[0].geometry.location.lng(); 
      latlng = new google.maps.LatLng(lat, lng); 
      console.log(latlng); // will give me the object in the log 
     } 
    }); 
    return latlng; // nothing happens 
}, 

ответ

0

Это потому, что geocode вызов является асинхронным, так что вы пытаетесь вернуть значение, прежде чем она существует.

Вы можете использовать функцию обратного вызова для вызывающего абонента, чтобы получить значение, когда он прибывает:

addressToLatLng: function(address, callback) { 
    var geocoder = new google.maps.Geocoder(), lat, lng, latlng; 
    geocoder.geocode({ 'address': address }, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      lat = results[0].geometry.location.lat(); 
      lng = results[0].geometry.location.lng(); 
      latlng = new google.maps.LatLng(lat, lng); 
      callback(latlng); 
     } 
    }); 
}, 

Использование:

yourController.addressToLatLng(address, function(latlng){ 
    console.log(latlng); 
}); 
+0

Firstofall спасибо! Код работает нормально, но не решает мою проблему. Я хочу использовать latlng вне обратного вызова. Например. a1 = this.addressToLatLng (address1) // a1 получает значение/объект LatLng a2 = this.addressToLatLng (address2) google.maps.geometry.spherical.computeDistanceBetween (a1, a2) – user3102211

+0

@ user3102211: Для того, чтобы сделать это вам понадобится машина времени, чтобы вы могли пойти в будущее и получить значение до того, как оно будет существовать. Это когда обратный вызов называется, что значение доступно для вас в первый раз, до этого вы не сможете его получить. Вы можете вернуть обещание из метода, но это всего лишь способ поместить обратный вызов в объект, который вы можете вернуть, вам все равно нужно получить значение из обещания асинхронно. – Guffa

+0

Ну, есть ли другая возможность получить расстояния от вашего текущего местоположения до некоторых адресов списка (без использования lat/lng, потому что это легко, когда они уже заданы)? – user3102211

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