Я пытаюсь изучить AngularJS. Моя первая попытка получать новые данные каждую секунду сработала:
'use strict';
function dataCtrl($scope, $http, $timeout) {
$scope.data = [];
(function tick() {
$http.get('api/changingData').success(function (data) {
$scope.data = data;
$timeout(tick, 1000);
});
})();
};
Когда я имитирую медленный сервер, засыпая поток на 5 секунд, он ждет ответа перед обновлением пользовательского интерфейса и установкой другого тайм-аута. Проблема в том, что я переписал приведенное выше, чтобы использовать модули Angular и DI для создания модулей:
'use strict';
angular.module('datacat', ['dataServices']);
angular.module('dataServices', ['ngResource']).
factory('Data', function ($resource) {
return $resource('api/changingData', {}, {
query: { method: 'GET', params: {}, isArray: true }
});
});
function dataCtrl($scope, $timeout, Data) {
$scope.data = [];
(function tick() {
$scope.data = Data.query();
$timeout(tick, 1000);
})();
};
Это работает, только если сервер отвечает быстро. Если есть какая-либо задержка, он отправляет 1 запрос в секунду, не дожидаясь ответа, и, кажется, очищает пользовательский интерфейс. Я думаю, мне нужно использовать функцию обратного вызова. Я старался:
var x = Data.get({}, function () { });
но получил сообщение об ошибке: «Ошибка: destination.push не является функцией» Это было основано на документации для $ resource, но я не совсем понял приведенные там примеры.
Как заставить второй подход работать?