我正在使用AngularJS开始我的jurney并且有一些关于将ajax请求中的数据分配给简单JS变量的问题。
我有services.js文件,在简单登录后我们将用户名存储在cookie中。 我想根据用户名从服务器获取用户ID。之后我想在另一个工厂的另一个文件中收到这个值。
services.js
angular.module('starter.services', ['ngResource', 'ngCookies', 'constants'])
.factory('Auth', function ($cookieStore, $http, $q, MYTAMER) {
var _user = $cookieStore.get('starter.user');
var setUser = function (user) {
_user = user;
$cookieStore.put('starter.user', _user);
};
function getUserId(username) {
return $http.get(MYTAMER.url + '/user/getId?username=' + username);
}
return {
setUser: setUser,
isLoggedIn: function () {
return _user ? true : false;
},
getUser: function () {
var userId = getUserId(_user.username)
.then(function (response) {
User.id = response.data;
});
return userId;
},
logout: function () {
$cookieStore.remove('starter.user');
_user = null;
}
}
});
仪表板services.js
angular.module('dashboard.services', ['ngResource', 'ngRoute', 'constants'])
.factory('Dashboard', function ($resource, $http, Auth) {
var dashboardData = {};
dashboardData.getGroups = function () {
console.log(Auth.getUser());
};
return dashboardData;
})
问题是我在http.get中获取userId值,但返回的值包含如下内容:
Promise {$$state: Object}
$$state: Object
status: 1
value: 1
您能否告诉我如何传递 response.data 中存储的值?谢谢
答案 0 :(得分:0)
在您的服务中,您在Auth.getUser
函数中返回的userId实际上是Javascript Promise Object。
简而言之,这意味着当您调用Auth.getUser
函数时,浏览器(即Javascript)必须异步等待从您的服务器(通过您调用的AJAX调用)中检索userId。 userId可以在Javascript的内存中访问。您使用.then()
函数告诉Javascript等待来自服务器的响应。
因此,您的getUser()
函数应该更像:
getUser: function () {
return getUserId(_user.username)
.then(function (response) {
User.id = response.data;
return response.data; // This is what gets passed to the .then() function in Auth.getUser().then(function (userData) {})
});
}
然后要获得userId,您需要执行以下操作:
Auth.getUser().then(function (userId) {
// Javascript waits until Auth.getUser() is completed, then runs this callback function. This is the information that is returned from the line `return response.data`
// Do what you need with the userId variable here
});