承诺与数据属性不起作用

戴维·卡尔森(David Karlsson)

我有一个工厂,承诺会每隔5秒轮询一次Web服务中的数据。数据将由控制器提取并解析。轮询程序是从app.run启动的。

问题是似乎无法从控制器访问数据,这是为什么?

(只是通过查看它,我开始怀疑LiveData var是否是线程安全的)

   factory('liveDataPoller', ['$http', '$timeout', function($http, $timeout) {
        var liveData = {
                status: -1,
                events: [],
                checksum: 0,
                serverTime: 0,
                calls: 0
            };
        var poller = function() {
                $http.get('/api/getInformation.json')
                    .then(function(res) {

                        status = res.statusCode;

                        if(status < 0) {
                            // TODO: handle service error
                        } else {
                            liveData.events = res.events;
                            liveData.checksum = res.checksum;
                            liveData.serverTime = res.serverTime;
                        }

                        liveData.status = status;

                        liveData.calls++;

                        $timeout(poller, 5000);
                    });
            };

        poller();

        return {
            getData: function() {
                return liveData;
            }
        };
    }])

控制器:

angular.module('myApp.controllers', [])
    .controller('MainCtrl', ['$rootScope', '$scope', '$timeout', 'liveDataPoller', function($rootScope, $scope, $timeout, liveDataPoller) {

           var transformLiveData = function(liveData) {
                var liveDataObj = {
                        serverTime: liveData.serverTime,
                        checksum: liveData.checksum,
                        events: [],
                        calls: liveData.calls
                    },
                    events = [],
                    i;

                if(liveData.events) {
                    for(i = 0; i < liveData.events.length; i++) {
                        events.push({
                            id:                 liveData.events[i].id,
                            name:               liveData.events[i].details[1],
                            freeText:           liveData.events[i].details[2],
                        });
                    }

                    liveDataObj.events = events;
                }

                return liveDataObj;
            }

        $rootScope.liveData = transformLiveData(liveDataPoller.getData());


    }])
穆罕默德·塞帕凡(Mohammad Sepahvand)

问题是liveData$http调用正在进行时,返回到服务中的行会执行,我会将liveData对象包装在一个Promise周围,并在控制器中使用该Promise。或者,作为穷人的方法,您可以liveData在控制器中观察对象:

$scope.$watch(liveDataPoller.getData,function(value){
    console.log(value);
},true)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

承诺数据属性不起作用

来自分类Dev

蓝鸟承诺`promisifyAll`不起作用-无法读取属性'then'

来自分类Dev

Ajax承诺不起作用

来自分类Dev

AngularJS承诺不起作用

来自分类Dev

明确承诺不起作用

来自分类Dev

Javascript 承诺不起作用

来自分类Dev

承诺“终于”不起作用

来自分类Dev

更改数据属性不起作用

来自分类Dev

数据属性在IE中不起作用

来自分类Dev

更改数据属性不起作用

来自分类Dev

从数据属性获取值不起作用

来自分类Dev

Bootsrap 数据属性不起作用

来自分类Dev

数据属性中的逗号不起作用

来自分类Dev

角度:数据绑定到数据属性不起作用

来自分类Dev

摩卡:承诺中的断言不起作用

来自分类Dev

承诺链示例不起作用

来自分类Dev

$ .when承诺对象不起作用时

来自分类Dev

承诺内的角度发射不起作用

来自分类Dev

承诺和完成不起作用

来自分类Dev

承诺解决后返回不起作用

来自分类Dev

离子 3 承诺不起作用

来自分类Dev

承诺异步代码不起作用 puppeteer

来自分类Dev

按顺序解决承诺不起作用

来自分类Dev

@indexed嵌套属性在Mongo的Spring数据中不起作用

来自分类Dev

.split()数据属性在应使用的时间不起作用

来自分类Dev

添加数据属性值不起作用

来自分类Dev

Vue:前缀“ _”在数据属性中不起作用

来自分类Dev

.split()数据属性在应使用的时间不起作用

来自分类Dev

具有数据属性的动态选择不起作用