我有以下代码AutocompleteService()
作为:
var strAddr = '';
if (address.value != "") {
var service = new google.maps.places.AutocompleteService();
service.getQueryPredictions({ input: address.value }, function (predictions, status) {
console.log('1');
if (status == google.maps.places.PlacesServiceStatus.OK) {
console.log('Original Response: ' + predictions[0].structured_formatting.secondary_text);
strAddr = predictions[0].structured_formatting.secondary_text;
}
});
console.log('strAddr: ' + strAddr);
console.log('2');
}
console.log('3');
我在控制台得到响应:
但它应该是:
为什么回调没有按预期顺序执行?
答案 0 :(得分:0)
不能保证你得到这个
因为这(new google.maps.places.AutocompleteService();)是异步调用,您的回调可以按任意顺序调用
答案 1 :(得分:0)
getQueryPredictions
函数是异步的(可能是通过AJAX发生的)。因此,您无法保证它会在紧随其后的代码之前完成。
e.g。对getQueryPredictions的调用可能需要0.5秒。因此,在发生这种情况时,这两行将能够立即执行:
console.log('strAddr: ' + strAddr);
console.log('2');
您不能依赖strAddr
在您的回调函数之外发生的任何等待getQueryPredictions响应的代码中可用。{/ p>