在Foreach循环JS中调用Async方法

时间:2014-08-15 12:15:50

标签: javascript jquery asynchronous closures

我正在尝试向Google地图进行异步调用,以获取foreach循环内的地址。

这是功能:

//Function to get address from geographic coordinates
        function getAddress(item) {
            var address = 'Not fetched';
            geocoder = new google.maps.Geocoder();
                var latlng = new google.maps.LatLng(parseFloat(item.Latitude), parseFloat(item.Longitude));
                geocoder.geocode({ 'latLng': latlng }, function (results, status) {
                    if (status == google.maps.GeocoderStatus.OK)
                        address = results[0].formatted_address;
                });
                return address;
        }

这是循环:

 recreateMarkers: function (self, data) {
                        data.vehicleInfo.forEach(function (item) {
                            self.Location= getAddress(item);
                        });
                    }

数据结构: 1. VehicleId 2.纬度 3.经度 4.位置

现在问题是它给了我所有车辆相同或未定义的位置。

如果有人可以提供帮助,我们会很高兴。

1 个答案:

答案 0 :(得分:0)

以下是异步问题,

return addressaddress = results[0].formatted_address;分配Google获取地址之前执行,因此您的功能应该是这样的

 function getAddress(item) {
            var address = 'Not fetched';
            geocoder = new google.maps.Geocoder();
                var latlng = new google.maps.LatLng(parseFloat(item.Latitude), parseFloat(item.Longitude));
                geocoder.geocode({ 'latLng': latlng }, function (results, status) {
                    if (status == google.maps.GeocoderStatus.OK)
                        address = results[0].formatted_address;
                        return address; //<= this statement should be here
                });
           // Note return address; should not be here
    }