我要疯了
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
latitude = results[0].geometry.location.lat();
longitude = results[0].geometry.location.lng();
locations[j][0] = direcciones[j]['1'];
locations[j][1] = latitude;
locations[j][2] = longitude;
locations[j][3] = direcciones[j]['10'];
j++;
}
});
如果我在geocode函数内做位置[0][0]的警报,它工作得很好,但如果我这样做,我得到以前的值,因为我没有修改全局位置变量…
有人能帮我正确地更改该变量吗?
…但如果我这样做,我得到以前的值,因为我没有修改全局位置变量…
是的,它只是在之后做。对geocode
的调用是异步的,因此在进行回调之前不会看到结果。紧跟在geocode
函数调用之后的代码将在回调运行之前运行,因此您不会看到任何更改。
让我们用一个更简单的例子来说明:
// A variable we'll change
var x = 1;
// Do something asynchronous; we'll use `setTimeout` but `geocode` is asynchronous as well
setTimeout(function() {
// Change the value
x = 2;
console.log(Date.now() + ": x = " + x + " (in callback)");
}, 10);
console.log(Date.now() + ": x = " + x + " (immediately after setTimeout call)");
如果你运行这个(fiddle),你会看到这样的内容:
1400063937865: x = 1 (setTimeout调用后立即)1400063937915: x = 2 (in callback)