Я хочу, чтобы создать ярлык, который показывает имя пользователя, вошедшего в систему:Асинхронное получение данных в AngularJS
<p style="color:white;font-weight:bolder;font-size:20px;padding-left:15px" title="Enter">{{userName}} Welcome</p>
В мой контроллер я проверил, если пользователь был идентифицирован:
$scope.initial = function() {
$http.get('Accounts/UserIsAuthenticated').success(function (response) {
// Accounts/UserIsAuthenticated check whether user is authenticated or not, and return bool value
debugger;
if (response == 'True') {
$rootScope.showLogin = false;
$rootScope.showWelcome = true;
$scope.userName = getUserName();
$rootScope.showLogout = true;
}
else {
$rootScope.showLogin = true;
$rootScope.showWelcome = false;
$rootScope.showLogout = false;
}
});
};
function getUserName() {
$http.get('Accounts/GetUserName').success(function (response) {
return response;
});
}
{{userName}}
устанавливается в undefined
. Я знаю, что getUserName()
требует времени для ответа, так как я могу его исправить?
Edit: я изменить мой код:
$scope.initial = function() {
$http.get('Accounts/UserIsAuthenticated').success(function (response) {
if (response == 'True') {
$rootScope.showLogin = false;
$rootScope.showWelcome = true;
getUserName().then(function (username) {
debugger;
$scope.username = username;
});
$rootScope.showLogout = true;
}
else {
$rootScope.showLogin = true;
$rootScope.showWelcome = false;
$rootScope.showLogout = false;
}
});
};
function getUserName() {
$http.get('Accounts/GetUserName');
}
Но это не работает! в чем проблема?
'return' в этот код ничего не вернет. Он находится внутри функции обратного вызова, которая ничего не может вернуть. Это не внутри функции getUserName, которая могла бы что-то вернуть, но перемещать ее туда не помогает. В общем, при работе с асинхронными методами вы ** не ** возвращаете * значение *, вы ** делаете ** возвращаете * обещание *, что будет значение позже. ('return $ http.get (...' в этом примере). – Claies