Я намагаюся вивчити 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 не є функцією" Це базувалося на документах для ресурсу $, але я не дуже розумів приклади там.
Як змусити другий підхід спрацювати?