2016-08-26 2 views
1

У меня есть следующий метод, который возвращает наблюдаемым:Выполнение вызовов API каждые 10 секунд

getWhatsUp() { 
    return this.http.get('user/whatsUp?token=' + this.getToken()) 
        .map((res:Response) => res.json()) 
       .catch(
     err => { 
      this.checkToken(err); 
      return Observable.throw('Unverified token'); 
      } 
    ); 
} 

Я использую его в моем компоненте следующим образом:

ngOnInit() { 
this.getWhatsUp(); 
} 

getWhatsUp() { 
    this.service.getWhatsUp() 
        .subscribe(
        data => { 
         this.activities = data.activities; 
        }, 
        error => { console.log("Error #333"); } 
        ); 
    } 

Как я могу запустить его каждый 10 секунд, чтобы активировать действия и убедиться, что вызов api не будет уложен и запущен несколько раз?

Я знаю о interval метод, но я не уверен, как использовать его в моей установке

ответ

0

Одним из возможных решений было бы создать дополнительную функцию в качестве обработчика с setInterval включены. setInterval (MyTimer, 10000)

ngOnInit() { 
    this.getWhatsUpHandler(); 
} 

getWhatsUpHandler(){ 
    setInterval(getWhatsUp, 10000); 
} 

getWhatsUp() { 
    this.service.getWhatsUp() 
       .subscribe(
       data => { 
        this.activities = data.activities; 
       }, 
       error => { console.log("Error #333"); } 
       ); 
} 
2

Почему не просто:

ngOnInit() { 
    setInterval(() => this.getWhatsUp, 10000); 
} 

Если Вам необходима дополнительная информация о синтаксисе, это ES6 Arrow function again.

1

В RxJS пути

ngOnInit(){ 
    let sec = 10; 
    Observable.timer(0, sec * 1000).subscribe(this.getWhatsUp()); 
} 
-2

Лучшее решение заключается в использовании угловых поставщиков $ интервал и $ разрушающих

Примера: Как это решение разрушает вызов, если текущее состояние/контроллер изменяется

var stop=$interval(function() { 
      function_call(); 
     }, 12000) 

     $scope.stopInterval = function() { 
      if (angular.isDefined(stop)) { 
       $interval.cancel(stop); 
       stop = undefined; 
      } 
     }; 

     $scope.$on('$destroy', function() { 
      // Make sure that the interval is destroyed too 
      $scope.stopInterval(); 
     });