AngularJS使用ng-resource和多个服务器轮询方法

时间:2015-12-07 13:24:48

标签: javascript angularjs ngresource

我正在使用基于此答案的方法:Server polling with AngularJS

但是,当我有多种轮询方法时,如何设置此更新?

以下是我服务的片段:

function pollingService($resource) {
    return {
        methodA: $resource(window.rootUrl + 'api/methodA', { para: '@para1' }, {
            query: { method: 'GET', params: {}, isArray: false }
        }),
        methodB: $resource(window.rootUrl + 'api/methodB', {}, {
            query: { method: 'GET', params: {}, isArray: false }
        })
    }
};

那么如何设置tick方法来轮询theese 2方法并仅创建1个轮询循环?

(function tick() {
    $scope.method1 = pollingService.methodA.query(function () {
        $timeout(tick, $scope.refreshRate);
    });
    $scope.method2 = pollingService.methodB.query(function () {
        $timeout(tick, $scope.refreshRate);
    });
})();

2 个答案:

答案 0 :(得分:2)

您可以使用promises $q.all函数:

var myTickFunc = function() {
  return $q.all([pollingService.methodA.query().$promise, pollingService.methodA.query().$promise)
     .then(function(result){ 
            //Setup timer again
});

答案 1 :(得分:1)

使用$q.all()

(function tick() {
    var promises = [];
    promises.push(pollingService.methodA.query().$promise);
    promises.push(pollingService.methodB.query().$promise);
    $q.all(promises).then(function(results){
        var result1 = results[0]; //Result from methodA
        var result2 = results[1]; //Result from methodB
        $timeout(tick, $scope.refreshRate);
    }
})();