2015-09-05 48 views
3

我有這個service它檢查是否有來自後端的新數據。它工作正常。但問題是我不能從服務的數據使用$watch或使用promise控制器。AngularJs如何從投票服務中獲取數據到控制器

SERVICE

.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; 
}) 

WATCH在控制器

$scope.$watch('notificationPollService.poller()', function(newVal){ 
    console.log('NEW NOT', response) // does nothing either. 
}, true); 

PROMISE在控制​​器

notificationPollService.poller().then(function(response){ 
    console.log("NEW NOTI", response) // not logging every poll success. 
}); 

我錯過了如何解決這個問題嗎?或者我只是做錯了什麼?

回答

3

在這種情況下使用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(notification.poller, 1000); 
     }); 
    } 

    notification.poller(); 

    return notification; 
}); 

notificationPollService.poller(function(data) { 
    $scope.data = data; // new data 
}, function(error) { 
    console.log('Error:', error); 
}); 
+0

你是嚮導嗎?謝謝;) – CENT1PEDE

+0

我得到錯誤「回調不是一個函數」,我該如何解決這個問題? – ste

+0

傳遞迴調函數。 – dfsq

相關問題