2016-11-03 7 views
0

私は座標のセットを放送していて、毎秒更新されるマーカーによって示されるその座標を望んでいます。角度のループで放送しても受信者に更新された値が与えられない

  var broadcastData = function (data) { 
      console.log("broadcasting data"); 
      $rootScope.$broadcast('broadcast-started', data); 
     }; 


      var waitingTime = 1000; 

      for(var i =0; i<data.length; i++){ 
       var element = data[i]; 

       var coordinates = new Object(); 
       coordinates.latitude = element.LATITUDE; 
       coordinates.longitude = element.LONGITUDE; 

       setTimeout(function(){ broadcastData(coordinates);}, waitingTime); 
       waitingTime = waitingTime+1000; 
      } 

レシーバ

$scope.$on('broadcast-started', function (event, args) { 
     console.log(args); 

     console.log("received"); 
     marker.setLatLng([args.latitude, args.longitude]); 

    }); 

出力: enter image description here

問題も座標が各反復座標の最初のセット毎に示されているが異なってもですか?それはあなたがこのようclouser機能を使用する必要が

+0

は、データの最後のオブジェクトのオブジェクトですか?私はあなたが参照座標を変更していると思います – Peheje

+0

それはどういう意味ですか?それを得ていない –

答えて

1

が起こっている理由を私は理解していない、

for(var i = 0; i < 10; i++) { 
(function(i){ 
    var element = data[i]; 

      var coordinates = new Object(); 
      coordinates.latitude = element.LATITUDE; 
      coordinates.longitude = element.LONGITUDE; 

      setTimeout(function(){ broadcastData(coordinates);}, waitingTime); 
      waitingTime = waitingTime+1000; 
})(i);} 
+0

なぜそれは何ですか?あなたは精巧に注意してくださいか? –

+0

これはbtwで動作します。私の実装で何が間違っているかを指摘できるなら、本当に良いでしょう。 –

+1

@AsiriLiyanaArachchiあなたのコードについては何も問題はありませんが、ループ内に$ timeout関数を実装すると、ループが終了した後に最後に値を取得します。 Clouserを使用すると、外部関数は新しい範囲を作成し、内部ではループ内でiと等しい値をとり、永遠に残ります。私は英語で週であり、より専門的な言葉で説明することができないので、より良いundestaningのために 'javascript clousers'を見てください。 – Priyanka

関連する問題