问这么微不足道的事情我觉得很愚蠢,但我真的想要最佳实践的答案(我不是在寻找“setTimeout”解决方案,除非没有其他可能——尽管我怀疑是这种情况)。
快速概览:我有一个数组,我想从回调中推送到该数组。在我填充了数组之后,我想在回调之外使用它。
实际用途:我有一系列城市,我想用 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
下面运行之前发生。