2015-10-27 10 views
1

Я пытаюсь настроить опрос для приложения, и у меня есть реализация, которая делает минимальный минимум, где поначалу она запускается, получает первый ответ, но не выполняет вызов $ timeout и бросает исключение (см. ниже). Я не могу понять, почему он не будет правильно опробовать, похоже, что он должен работать, API говорит, что $ timeout принимает функцию ... Любые идеи?AnglerJS Poller Throws

Если я прокомментирую строку 65 $ timeout (...); Я не получаю сообщение об ошибке.

Исключение

Error: [$http:badreq] Http request configuration must be an object. Received: function() 
http://errors.angularjs.org/1.4.7/$http/badreq?p0=function%20() 
    at angular.js:68 
    at $http (angular.js:10189) 
    at scoreboard-service.js:65 
    at processQueue (angular.js:14745) 
    at angular.js:14761 
    at Scope.$eval (angular.js:15989) 
    at Scope.$digest (angular.js:15800) 
    at Scope.$apply (angular.js:16097) 
    at done (angular.js:10546) 
    at completeRequest (angular.js:10744) 

Избирательный завод и инициализация в .run.

опрос завод

/** 
* 
*/ 
.factory('ScoreboardPollFactory', ['ConfigSettings', 'ScoreboardFactory', '$http', '$timeout', 
    function (ConfigSettings, ScoreboardFactory, $timeout) { 

     var pollingTimeout = ConfigSettings.pollingTimeout; 
     var data = {response: {}, calls: 0}; 

     var poll = function (courtId) { 

      var courtId = 1; // testing app so hardcoded for now till API is ready 

      console.log(ScoreboardFactory); // debug: has correct factory object, and never makes it back here after hitting $timeout 

      ScoreboardFactory.getCourtScore(courtId).then(function (response) { 
       data.response = response.data 
       data.calls++; 

       console.log(response); // debug: contains first response 
       console.log(data); 
       console.log(poll); // debug: outputs poll function 

       $timeout(function() { // <-- this is line 65 from error 
        poll(courtId); 
       }, pollingTimeout); 
      }); 
     } 

     poll(); 

     return { 
      data: data 
     }; 
    }]) 

/** 
* 
*/ 
.run(['ScoreboardPollFactory', function (ScoreBoardPollFactory) { 
}]); 
+0

Попробуйте определить функцию опроса как 'function poll() {}', а не 'var poll = function() {}' – hally9k

+0

Hi @ hally9k, я на самом деле определил ее так же, как и первый раз, и изменил ее на var poll = function() {...} 'после того, как она не сработала изначально. – mtpultz

+0

Ошибка упоминает '$ http', а не' $ timeout'. Вы ищете не то место; вы уверены, что это 'scoreboard-service.js'? Кроме того, ваша функция 'poll', похоже, не принимает никаких аргументов, но вы передаете ее один в' poll (courtId) ' – Phil

ответ

2

Вот ваша проблема (выстроено так что вы можете увидеть, что происходит)

.factory('ScoreboardPollFactory', 
      ['ConfigSettings', 'ScoreboardFactory', '$http', '$timeout', 
    function (ConfigSettings, ScoreboardFactory, $timeout) { 

Вы инъекция $http службу как $timeout.


Я рекомендую использовать сборки-инструмент, как ng-annotate для создания массивов инъекционных зависимостей, чтобы вы избежать нарваться вопросы, как это.

+0

Ты потрясающий! Спасибо за ссылку, которая идет в рабочий процесс прямо сейчас. – mtpultz