AngularJS 将 ng-resource 与多种服务器轮询方法结合使用

AngularJS using ng-resource with multiple server polling methods

我正在使用基于这个答案的方法: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 方法来轮询这 2 个方法并且只创建 1 个轮询循环?

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

使用$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);
    }
})();

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

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