При помощи AngularJS пытаюсь получить список пользователей через http.post и проверить, есть ли в массиве нужный логин. Проблема в том, что ответ от http.post приходит поздно — скрипт успевает отвалиться с ошибкой undefined (GetUsers() возвращает undefined). Изначально результаты проверялись из localStorage - они возвращались моментально и проблемы не было.
(function () {
'use strict';
angular
.module('app')
.factory('UserService', UserService);
UserService.$inject = ['$timeout', '$filter', '$q', '$http'];
function UserService($timeout, $filter, $q, $http) {
var service = {};
service.GetByUsername = GetByUsername;
return service;
function GetByUsername(username) {
var deferred = $q.defer();
var filtered = $filter('filter')(getUsers(), { user_login: username });
var user = filtered.length ? filtered[0] : null;
deferred.resolve(user);
return deferred.promise;
}
function getUsers() {
var config = {
headers : {
'Content-Type': 'application/json'
}
}
$http.post('/post/get_users', {}, config).then(function successCallback(response) {
return response;
}, function errorCallback(response) {
});
}
}
})();
Собственно, весь вопрос в том, как сделать так, чтобы скрипт «дождался» ответа от getUsers(), перед тем как делать эту проверку:
var user = filtered.length ? filtered[0] : null;
Сейчас скрипт всегда отдаёт Cannot read property 'length' of undefined, не дожидаясь ответа getUsers().