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
});
我正在使用基于这个答案的方法: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
});