我需要从Javascript/jQuery中的一个函数返回一个数组,但该函数在数组被设置之前就返回了(因为它是一个 AJAX 调用)。
有人建议我使用promise,但我以前没有使用过,而且到目前为止还无法在代码中实现它。下面是我的代码:
mapClass.setLatLng = function(location, clubs) {
document.geoCodeRequestCompleteFlag = 0;
geocoder = new google.maps.Geocoder();
geocoder.geocode({'address' : location}, function(results, status) {
//console.log(results);
if(status === "OK") {
var latLngArray = [];
latLngArray.push(parseFloat(results[0].geometry.location.lat()));
latLngArray.push(parseFloat(results[0].geometry.location.lng()));
var sortedArray = mapClass.calculateDistances(clubs, latLngArray);
return sortedArray;
}
});
}
可以看到,当我返回is时,sortedArray变量为空。有没有人知道我如何添加块代码来确保数组变量在返回之前被设置好?谢谢
2条答案
按热度按时间6ojccjat1#
使用promise的方式是创建一个promise,然后从方法中返回该promise。这个promise有像
.then(successHandler, errorHandler)
这样的方法,允许你指定当promise被 resolved(被赋予一个值)时要执行的函数。然后,在将来某个时候从地理编码器调用中获取结果时,解析promise。在jQuery中,promise被称为Deferreds。
然后,您的代码将更改为如下所示:
你可以这样使用它:
wkftcu5l2#
更新:该模块已弃用,请使用@googlemaps/google-maps-services-js。
如果您使用的是官方的Google Maps Official NPM module,你可以做得更容易和清洁.
首先,您需要使用
Promise
属性初始化客户端:然后,你需要做的就是使用
asPromised()
,然后你就可以开始了: