为什么谷歌放置AutocompleteService回调没有被执行?

时间:2016-12-28 15:10:16

标签: google-maps google-maps-api-3 google-places-api

我有以下代码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');

我在控制台得到响应:

  • strAddr:
  • 2
  • 3
  • 1
  • 原始回复://在此处获取匹配的地址

但它应该是:

  • 1
  • 原始回复://此处匹配的地址>
  • strAddr://此处匹配的地址
  • 2
  • 3

为什么回调没有按预期顺序执行?

2 个答案:

答案 0 :(得分:0)

不能保证你得到这个

  • 1
  • 原始回复://此处匹配的地址>
  • strAddr://此处匹配的地址
  • 2
  • 3

因为这(new google.maps.places.AutocompleteService();)是异步调用,您的回调可以按任意顺序调用

答案 1 :(得分:0)

getQueryPredictions函数是异步的(可能是通过AJAX发生的)。因此,您无法保证它会在紧随其后的代码之前完成。

e.g。对getQueryPredictions的调用可能需要0.5秒。因此,在发生这种情况时,这两行将能够立即执行:

console.log('strAddr: ' + strAddr);
console.log('2');

您不能依赖strAddr在您的回调函数之外发生的任何等待getQueryPredictions响应的代码中可用。{/ p>