AngularJs 如何从轮询服务获取数据到控制器
AngularJs how to get data from a polling service to a controller
我有这个 service
检查是否有来自后端的新数据。它工作 fine.But 问题是我无法使用 $watch
或 promise
从服务获取数据到控制器。
服务
.service('notificationPollService',function($q, $http, $timeout){
var notification={};
notification.poller = function(){
return $http.get('some/routes/')
.then(function(response) {
$timeout(notification.poller, 1000);
if (typeof response.data === 'object') {
return response.data;
} else {
return $q.reject(response.data);
}
}, function(response) {
$timeout(notification.poller, 5000);
return $q.reject(response.data);
});
}
notification.poller();
return notification;
})
在控制器中观看
$scope.$watch('notificationPollService.poller()', function(newVal){
console.log('NEW NOT', response) // does nothing either.
}, true);
控制器中的承诺
notificationPollService.poller().then(function(response){
console.log("NEW NOTI", response) // not logging every poll success.
});
有没有我错过的解决方法?或者我只是做错了什么?
在这种情况下使用 promise 可能不是最方便的方法,因为它不应该被多次解析。您可以尝试使用旧的普通回调实现轮询器,您可以重复调用它们而无需创建新的承诺实例:
.service('notificationPollService', function ($q, $http, $timeout) {
var notification = {};
notification.poller = function (callback, error) {
return $http.get('some/routes/').then(function (response) {
if (typeof response.data === 'object') {
callback(response.data);
} else {
error(response.data);
}
$timeout(function(){
notification.poller(callback, error);
}, 1000);
});
};
return notification;
});
notificationPollService.poller(function(data) {
$scope.data = data; // new data
}, function(error) {
console.log('Error:', error);
});
我有这个 service
检查是否有来自后端的新数据。它工作 fine.But 问题是我无法使用 $watch
或 promise
从服务获取数据到控制器。
服务
.service('notificationPollService',function($q, $http, $timeout){
var notification={};
notification.poller = function(){
return $http.get('some/routes/')
.then(function(response) {
$timeout(notification.poller, 1000);
if (typeof response.data === 'object') {
return response.data;
} else {
return $q.reject(response.data);
}
}, function(response) {
$timeout(notification.poller, 5000);
return $q.reject(response.data);
});
}
notification.poller();
return notification;
})
在控制器中观看
$scope.$watch('notificationPollService.poller()', function(newVal){
console.log('NEW NOT', response) // does nothing either.
}, true);
控制器中的承诺
notificationPollService.poller().then(function(response){
console.log("NEW NOTI", response) // not logging every poll success.
});
有没有我错过的解决方法?或者我只是做错了什么?
在这种情况下使用 promise 可能不是最方便的方法,因为它不应该被多次解析。您可以尝试使用旧的普通回调实现轮询器,您可以重复调用它们而无需创建新的承诺实例:
.service('notificationPollService', function ($q, $http, $timeout) {
var notification = {};
notification.poller = function (callback, error) {
return $http.get('some/routes/').then(function (response) {
if (typeof response.data === 'object') {
callback(response.data);
} else {
error(response.data);
}
$timeout(function(){
notification.poller(callback, error);
}, 1000);
});
};
return notification;
});
notificationPollService.poller(function(data) {
$scope.data = data; // new data
}, function(error) {
console.log('Error:', error);
});