我覺得自己很愚蠢,因爲問一些很瑣碎的事情,但我真的想要最好的實踐答案(除非沒有其他可行的方法,否則我不會尋找「setTimeout」解決方案 - 儘管我懷疑是這樣)。Javascript回調時間
快速瀏覽:我有一個數組,我想從回調中推送到。在我填充數組之後,我想在回調之外使用它。
實際應用:我有一個城市陣列,我想用Google的API對它們進行地理編碼,並用所有LatLng的數組填充一個數組。之後,我將使用它們創建標記對象,將它們添加到聚類器中,無論如何。
coder = new google.maps.Geocoder();
$places = ['Truro, NS', 'Halifax, NS', 'Sydney, NS', 'Dartmouth, NS'];
all_the_pins = Array();
for(i in $places){
var $place = $places[i];
coder.geocode({address:$place}, function(res, stat){
switch(stat){
case 'OK':
all_the_pins.push(res[0].geometry.location);
break;
}
});
}
console.log(all_the_pins);
編輯:澄清問題: 問題是不是範圍問題all_the_pins
變量或是否是全球性與否,如果你是在回調中檢查all_the_pins
你會看到它是相同的變量(被推送到)。問題在於,因爲推送發生在回調內,所以在下面運行console.log
之前它們不會發生。
什麼問題?你的位置將積聚在'all_the_pins'數組中。如果您全局聲明該數組,它將在全局範圍內可用。 – jfriend00
只需將您的數組聲明爲全局變量? 'var all_the_pins = [];'在文檔的頂部。它可以在所有範圍內訪問。 –
我同意,我不明白這個問題...... – Jonathan