数组表示长度为0但显示在控制范围内

时间:2016-12-15 02:49:29

标签: angularjs arrays google-geocoder

您好,我想尝试获得自由度&使用地理编码器的经度如下代码。

function getLatitudeLongitude(callback, address) {
    geocoder = new google.maps.Geocoder();
    if (geocoder) {
        geocoder.geocode({
            'address': address
        }, function (results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                callback(results[0]);
            }
        });
    }
}

我的API成功功能如下

var tempArr = [];
var posObj = {};

_.each(vm.result, function(data) {
    var tempPosArr = [];
        getLatitudeLongitude(function (result) {
        var tempPosArr = [];
            tempPosArr.push(result.geometry.location.lat());
            tempPosArr.push(result.geometry.location.lng());
            var posObj = {
                pos : tempPosArr
            };
            positions.push(posObj);
       }, data.location)
       console.log(positions);
});

console.log(positions.length);

我已在全球范围内声明此位置变量。并且正在推动数据但是低于结果。

enter image description here

它获得了所有纬度,经度并且创建了Temp Obj,但是在外面,结果如图所示。

1 个答案:

答案 0 :(得分:0)

是的,因为这个函数:getLatitudeLongitude可能从服务器获取数据,你需要使用Promise for this

前:

var tempArr = [];
var posObj = {};
var defer = $q.defer(); // inject the $q service to add defer
_.each(vm.result, function(data) {
    var tempPosArr = [];
        getLatitudeLongitude(function (result) {
        var tempPosArr = [];
            tempPosArr.push(result.geometry.location.lat());
            tempPosArr.push(result.geometry.location.lng());
            var posObj = {
                pos : tempPosArr
            };
            positions.push(posObj);
           defer.resolve(positions);// now you resolve the promise 
       }, data.location)
       console.log(positions);
});

//console.log(positions.length);
// you can catch the promise here when it resolved 
defer.promise.then(function(positions){
 console.log(positions)
});