【发布时间】:2018-02-14 07:07:32
【问题描述】:
我正在尝试创建一组函数,使用 Google Maps Geocoder API 将一组地址转换为 lat long 值。
目前,我已经成功地将地址转换为 lat long 值,但函数在返回之前完全执行。我知道这一点,因为它在之后记录正确的 lat long 值之前会引发未定义的错误。
我听说 javascripts promises 可以解决这类问题,所以我做了一些研究,但似乎对这些问题没有帮助。我是新的承诺,如果我以错误的方式处理这件事,请原谅。
这是相关代码
function getPoints(geocoder,map) {
let locationData = [];
let latValue;
for(let i = 0; i < addressData.length; i++){
let getLatLong = new Promise(function(resolve,reject){
latValue = findLatLang(addressData[i].location, geocoder, map);
if(latValue!=undefined){
resolve(latValue());
} else {
reject();
}
});
getLatLong.then(function(){
console.log(latValue);
//returns a GMap latLng Object.
locationData.push( new google.maps.LatLng(latValue[0],latValue[1]));
})
}
return locationData;
}
function findLatLang(address, geocoder, mainMap) {
geocoder.geocode({'address': address}, function(results, status) {
if (status === 'OK') {
console.log(results);
return [results[0].geometry.location.lat , results[0].geometry.location.lng];
} else {
alert('Couldnt\'t find the location ' + address);
return;
}
})
}
提前感谢您提供的任何帮助或指点!
【问题讨论】:
-
@Jaya 在 getPoints 的 for 循环内有一个叫做 getLatLong 的承诺。同样,我只看了几个视频,所以我可能完全错误地使用了这个。
-
糟糕,刚刚看到了。此外,您在循环中有一个承诺,并且循环将在执行您的
then之前进行迭代。所以你需要稍微修改你的代码。让我提供样品 -
将所有的 promise 放入一个数组中,然后等待它们,但是你希望它并行处理还是一个接一个地处理?
标签: javascript google-maps google-maps-api-3 es6-promise