2016-12-15 6 views
0

こんにちは私は緯度を取得しようとしています&経度は、以下のコードでジオコーダを使用しています。私は、これはグローバルレベルで変数を宣言したpostions配列の長さは0だが、制御に表示される

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); 

以下のよう

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の成功関数です。データはプッシュされていますが、結果は下がっています。

enter image description here

これは、すべての緯度、経度および作成した一時OBJがさえ押されましたが、外では、結果は画像のようになります。

+0

時間によってあなたは配列を検査することが可能ですそれは子供がいなかったし、後でそれを追加した神ですか? @ user422831 – Yaser

答えて

0

はい、それはこの機能するので、次のとおりです。getLatitudeLongitudeがサーバから多分データを取得し、あなたがこの

EXのための約束を使用する必要があります。

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) 
}); 
関連する問題