#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
— usingsetInterval
непрерывно вызывал предоставленную функцию каждые 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
код повторяется снова и снова. В вашем случае каждую секунду.