Моя цель , чтобы показать имя пользователя, которое необходимо манипулировать на веб-странице. Маршрутизация должна выполняться централизованно в сервисе (MasterDataService). Я хочу использовать переменную области видимости на экране, которая определена в контроллере. Контроллер вызывает централизованный сервис. Служба вызывает другую службу, которая вызывает внутренний сервер, обрабатывает имя пользователя и возвращает результат обратно контроллеру. Результатом должен быть только объект JSON, а не разрешенный запрос (отложить и обещать).Получение только объекта от асинхронного вызова
Веб-страница -> страница контроллер-> Централизованная сервис-> абонентское -> и путь назад
Я делаю это, как этот
веб-страницы
<div id="usercontainer" ng-show="currentUser" class="ng-hide">
Hallo, {{currentUser.currentUserName}}.<br />
(<a href="#/logout">Abmelden</a>)
</div>
контроллер
$scope.getCurrentUser = function() {
$scope.currentUser = MasterDataService.getCurrentUser();
$log.debug($scope.currentUser); // <-- this is empty afterwards (undefined)
}
MasterDataSer вице-
getCurrentUser: function() {
var promise = UserService.getCurrentUser();
promise.then(function (resolvedResponse) {
$log.debug("MasterDataService.getCurrentUser.start");
var currentUser = resolvedResponse.data;
var userLabel = currentUser.Email;
if (currentUser.Salutation && (currentUser.LastName !== "" && currentUser.LastName !== undefined && currentUser.LastName !== null)) {
userLabel = currentUser.Salutation.Name + " " + currentUser.LastName;
if (currentUser.Title) {
userLabel = currentUser.Salutation.Name + " " + currentUser.Title.Name + " " + currentUser.LastName;
}
}
currentUser.currentUserName = userLabel;
return currentUser;
}, function (resolvedResponse) {
$log.debug("MasterDataService.getCurrentUser.error");
}, function (resolvedResponse) {
$log.debug("MasterDataService.getCurrentUser.notification");
});
}
UserService
getCurrentUser: function (optionsData) {
$log.debug("UserService.getCurrentUser.start");
var promise = $http({
method: 'GET',
url: '/api/User'
}).then(function (response) {
var deferred = $q.defer();
$log.debug("UserService.changeOptions.success.status: " + response.status);
if (response.status == 200) {
deferred.resolve(response);
return deferred.promise;
}
deferred.reject('OptionsNotChanged');
return deferred.promise;
}, function (response) {
$log.debug("UserService.changeOptions.error.status: " + response.status);
return $q.reject('OptionsNotChanged');
});
return promise;
},
Может someboddy сказать мне, почему мой объект в контроллере пуст после этого и как я могу добиться, чтобы просто получить манипулировали объект обратно из MasterDataService? Должен ли я делать это с обещанием и отсрочкой? И если да, как я могу манипулировать пользовательским объектом в службе, прежде чем возвращать его?
Заранее спасибо Sascha
Не имеет смысла возвращать значения из асинхронной операции. Вы должны использовать обратные вызовы или обещания (на самом деле две версии того же самого). – Pointy
Спасибо @Pointy. Дело в том, что я не знаю, как я могу манипулировать возвращенными данными в ecallback, прежде чем передавать его вызывающему снова асинхронным способом. – SLi