0

我有以下地理编码异步方法,它按预期工作,从我拥有的自定义对象数组中获取地址,我的问题是将结果映射回触发该方法的对象 [i],查看结果只会给我返回与我输入的地址不同的格式化地址,“Google 添加了一些区号,将 St 更改为街道等。” 因此,当我得到这些结果时,由于此方法的异步性质,我无法匹配我获得的每个对象的新 Lat 和 Lng 坐标,并且结果不会按顺序返回,知道我可以在这里做什么吗?

谢谢。

编辑:我的想法是创建一种方法来按顺序恢复结果,将其更改为同步,我知道不理想,我找不到任何示例。

函数 iterateAndAddress(objArray) {

    for(var i=0; i< objArray.length; i++) {

        var address = objArray[i].BillingStreet +' '+objArray[i].BillingCity+' '+objArray[i].BillingCountry;
        var geocoder = new google.maps.Geocoder();
        console.log('Address = '+address);

        if(geocoder) {
            geocoder.geocode( { 'address': address}, function(results, status) { 

                if (status == google.maps.GeocoderStatus.OK) {

                    //console.log(results);
                    var lat = results[0].geometry.location.lat();
                    var lon = results[0].geometry.location.lng();  
                    console.log('Address : '+results[0].formatted_address);


                }else if(status == 'OVER_QUERY_LIMIT') {

                }
                else{

                }
            });  
         }  

    }  
}
4

1 回答 1

0

将 id 放入组合中。除了返回数据之外,还返回 id 并绑定信息完成并除尘。

... 编辑

好的,所以您正在从对象数组发出请求。该数组是否有 id 键?如果是这样,那么除了返回 lat 和 long 之外,还返回 id。

var id = objArray[i].id
var lat = results[0].geometry.location.lat();
var lon = results[0].geometry.location.lng();

或者您使用的任何 id 键。

返回一个数组(或诸如此类的对象)可能会更好

result[i].lat = results[0].geometry.location.lat();
result[i].lon = results[0].geometry.location.lng();

只要您知道与 i 相关的记录,您就有了比较点。

我必须承认,我一定错过了您当前方法的异步性(单词?)。

于 2013-03-06T11:38:51.857 回答