Обновлять область на каждый x раз, используя $timeout

Я новичок в angular. Я хочу использовать $timeout angular для обновления области действия через несколько минут. Я работаю над социальным приложением, где мне нужно обновить область уведомлений через несколько минут. Получение уведомления от HTTP-запроса с использованием службы.

JS:

App.factory('MyService' ,function($scope,$timeout){
return{
 notification:return function(callback){
      $timeout(function(){
       $http.get("notification/get").success(callback)
      },100000);


}
}); 

function Controller($scope,MyService){

 MyService.notification(function(result){
  $scope.notification =data;
 });

}

Теперь, как я могу сделать HTTP-запрос через несколько минут, давая 1 минуту и ​​обновить область уведомлений. Я пытался использовать $timeout, но все не работает нормально.

Ответ 1

Но я бы предложил переместить $interval на контроллер.

 App.factory('MyService' ,function($scope,$timeout){
  return{
    notification: function(){
        return $http.get("notification/get").success(function(response){
           return response.data;
        });          
    }
  }); 

function Controller($scope,MyService,$interval){  

   /**
   * Loads and populates the notifications
   */
   this.loadNotifications = function (){
      MyService.notification().then(function(data){
        $scope.notification =data;
      });
   });
   //Put in interval, first trigger after 10 seconds 
   var theInterval = $interval(function(){
      this.loadNotifications();
   }.bind(this), 10000);    

    $scope.$on('$destroy', function () {
        $interval.cancel(theInterval)
    });

   //invoke initialy
   this.loadNotifications();
}

Это похоже на лучшую архитектуру.

Передача, разрешение или отклонение promises будет $digest областью. Вы хотите получать уведомления каждые x миллисекунд и передавать их в область.

Ответ 2

Вы хотите создать экземпляр таймаута после его завершения. Попробуйте изменить функцию $timeout на что-то вроде:

var timer = $timeout( function refresh(){
    $http.get("notification/get").success(callback)
    timer = $timeout(refresh, 100000);
}, 100000);