Google Maps Geocoder APIを使用してアドレスのセットを緯度の高い値に変換する一連の関数を作成しようとしています。Google Maps Geocoder APIで約束する
現在のところ、アドレスをlong long値に変換することに成功しましたが、関数は返される前に完全に実行されます。私はこれが正しいことを知らせる前に、未定義のエラーがスローされるので、これを知っています。
私はJavaScriptの約束がこの種の問題の解決策になると聞きましたので、少し研究をしましたが、問題を助けてくれないようです。私は約束しています。
Here`s関連するコード
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;
}
})
}
あなたが持っているであろう任意の助けやポインタを事前に感謝!
getPointsのforループの内部には、getLatLongという約束があります。もう一度私はいくつかのビデオを見たので、私はこれを完全に間違って使用しているかもしれません。 –
おっとそれを見ました。また、ループの中に約束があり、ループはあなたの 'then'を実行する前に繰り返されます。したがって、コードを少し変更する必要があります。私はサンプルを提供しましょう – Jaya
あなたの約束事をすべて配列に入れておき、それを待っていますが、それを並列に処理したいのですか? – Jaya