【发布时间】:2016-05-01 17:49:02
【问题描述】:
嗨
我正在我的网站上创建一个页面,该页面使用 google places api 和用户的地理位置(lat、lng)并查找附近的餐馆。作为代码的一部分,我还查找了餐厅与用户位置的距离。问题是当它得到每个结果时,我有一个名为 getDistance 的函数,它为每个地方调用。这会为很多结果返回空字符串,并且确实会返回一些结果。出于示例的目的,我在这个 plunker 示例中对用户的位置进行了硬编码。有人可以指出为什么没有为每个地方返回距离以及为什么它为某些地方返回一个空字符串以及对此的正确解决方法吗?我真的很感谢你的帮助。
我正在调用 get distance 函数,该函数在场所服务的回调函数中计算每家餐厅的距离(以英里为单位)
angular.forEach(results, function(result) {
//using new function for getting distance from user's location
var place = getDistance(result, service);
$scope.places.push(place);
});
这里是getDistance函数
function getDistance (place, service) {
var request = {
reference: place.reference
};
service.getDetails(request, function (details, status) {
if(status == google.maps.places.PlacesServiceStatus.OK) {
place.details = details;
var distance = google.maps.geometry.spherical.computeDistanceBetween
(new google.maps.LatLng(33.940496, -84.048816), new google.maps.LatLng(place.geometry.location.lat(), place.geometry.location.lng()));
var distanceInMiles = getMiles(distance);
place["distance"] = distanceInMiles;
}
});
return place;
};
【问题讨论】:
-
看起来像同步问题,在 getDetails 回调设置 place["distance"] 之前返回位置。
-
right serg 我如何修改此代码,以便在从 service.getDetails 返回响应之前不会返回该位置。我不能做。然后似乎在 getDetails 函数上,更改示例会有所帮助,谢谢!!
-
你需要 promises/deferred 对象来让你的异步请求同步回来。见docs.angularjs.org/api/ng/service/$q
-
嗨,serg,我添加了一个延迟对象/promise 到 getDistance 函数,现在正在添加解决 promise 时的位置,但认为仍然存在距离永远不会添加的问题,我认为总体没有结果也没有像以前那样显示。你能看看 plunker 并让我知道在返回之前是否正确解决了承诺?
标签: javascript angularjs google-maps google-places-api