Синтаксическая ошибка: неожиданный идентификатор в цикле for в AngularJS $ http.get

#javascript #angularjs

#javascript #angularjs

Вопрос:

Почему я получаю «синтаксическую ошибку: неожиданный идентификатор» и почему мой браузер застревает в непрерывном цикле после того, как я запускаю этот код? Я использую setInterval для задержки запросов к API в соответствии с рекомендациями по запросам API.

 var tempArray = []; 
var arr = [];   
//angular controller    
for (var i = 0; i < 10; i  ) {
    setInterval($http.get(url).success(function(data) {
        tempArray.push(data);
        arr.push(tempArray);
    }), 1000);
}
  

Комментарии:

1. Где вы получаете «неожиданный идентификатор»? Кроме того, если вы хотите отложить запрос, вы, вероятно, захотите, чтобы setTimeout — using setInterval непрерывно вызывал предоставленную функцию каждые 1 секунду.

2. Приложения AngularJS должны использовать $timeout сервис для устранения задержек, поскольку он должным образом интегрируется window.setTimeout с платформой AngularJS. Для получения дополнительной информации смотрите AngularJS $timeout Service API Reference ;

3. В любом случае, оба $timeout и window.setTimeout требуют, чтобы первый аргумент был функцией. Служба $http возвращает объект promise.

Ответ №1:

Как объяснил @vlaz, вы хотите, setTimeout если вы хотите что-то «отложить». setInterval будет постоянно вызывать предоставленный обратный вызов.

Я немного смущен, почему в рекомендациях API говорится о «задержке» запросов… они означают «отменить»?

В любом случае … синтаксическая ошибка «неожиданный идентификатор» будет вызвана тем, что вы не передаете функцию в качестве первого аргумента setInterval . Вам нужно:

 setTimeout(function() {
  $http.get(url).success(function(data) {
    tempArray.push(data);
    arr.push(tempArray);
  });
}, 1000);
  

$http.get(url).success() не возвращает функцию, которую setTimeout можно вызвать, поэтому вы не можете передать ее напрямую.

Комментарии:

1. Спасибо @jjenzz!

Ответ №2:

Вы должны добавить $http в свой контроллер. Нравится:

 myApp.controller('MainController', function MainController($scope,$http) {...}
  

И с использованием setInterval код повторяется снова и снова. В вашем случае каждую секунду.