Итак, у меня есть немного путаницы с угловыми обещаниями.Найти и вернуть товар в Угловое отложенное обещание
У меня есть службы, сохранение списка пользователей
.service('user', ['$q','$http', function ($q, $http) {
var services = {};
var _def_userLsit = $q.defer();
$http.get('/api/acc/getlist').then(function (data) {
_def_userLsit.resolve(data);
})
services.getUserListQ = function() {
return _def_userLsit.promise;
}
return services;
}])
после введения его, я могу загрузить мой список, как это в контроллере:
user.getUserListQ().then(function (promise) {
$scope.userHelper.userList = promise.data;
});
не проблема здесь, получил JSON в области $ scope, наблюдатели выполняют свою работу отлично.
Здесь формат Json упрощены для вопроса:
OBJ 1 {ID = 4, UserName = "foohuman", $$ hashKey = "объект: 14"} OBJ 2 {ID = 444, имя пользователя = "barhuman", $$ hashKey = "object: 22"}
Но я также хочу, чтобы имя пользователя по id, и мне нужно запустить его несколько раз (в зависимости от количества сообщений).
Так что мой вопрос здесь в том, как я могу вернуть имя пользователя, как вызов функции, из обещанного списка.
как нормальная функция будет делать, как это:
$scope.getUserById = function( id){
return "foo";
//some magic needed here
}
Если я просто перебирать корыта userHelper.userList, это может быть пустым, если он работает слишком рано, так что мне нужно загрузить, что корыта обещание , но загружая его, итерируя корыто, то добавление строки в область $ не является лучшим вариантом, так как оно может выполняться несколько раз, поэтому оно может перезаписывать друг друга, довольно непредсказуемо, если я храню его в одной переменной.
Итак, любая идея, как я могу вернуть приятную простую строку по id, а не обещание?
EDIT: Хорошо, поэтому я не могу вернуть хорошую строку, потому что это должен быть какой-то обратный вызов, но я могу обработать данные из обещания, поэтому я закончил загрузку пользовательских данных в массив, это:
user.getUserListQ().then(function (promise) {
var uArr = [];
angular.forEach(promise.data, function (value, key) {
uArr[value.id] = value.userName;
})
$scope.userHelper.uArr = uArr;
});
и в HTML, я могу смело писать {{userHelper.uArr[taskData.tOwner]}}
.
Избегайте [отложенные антипаттерны] (http://stackoverflow.com/q/23803743/ 1048572)! – Bergi