javascript - 以 Angular 循环广播不会在接收器中给出更新值

标签 javascript angularjs asynchronous

我正在广播一组坐标,并希望标记显示的坐标每秒更新一次。

         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函数,

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

关于javascript - 以 Angular 循环广播不会在接收器中给出更新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40399036/

相关文章:

javascript - Jquery 移动按钮和 i18next 翻译

javascript - 单击时追加元素

c# - Queue<T>.Enqueue(T) 方法单独使用时是线程安全的吗?

javascript - 将 Firebase Cloud Function TypeScript 语法转换为 JavaScript

javascript - 使用 JQuery 预填充选择字段的下拉选项验证

javascript - AngularUI Typeahead 两次触发 ng-blur 函数

html - Angularjs UI-路由器问题

javascript - 如何避免为每个循环添加内部 Angular 重复记录?

c# - 在异步 HttpWebResponse 读取期间捕获未处理的 SocketException

asynchronous - 如何在 initState() 中有异步调用的情况下测试 Flutter 应用程序?