好吧,我是第一次尝试使用 Promise,所以请耐心等待。这个问题建立在我的问题How to pass results from POST request to another page in Ionic and Angular的基础上。本质上,我正在执行基本的用户身份验证,并创建了一项服务来向数据库发出发布请求,以确认输入了有效的登录信息。我想要做的是将 POST 请求的响应存储在一个数组中,稍后我可以在我的个人资料页面中访问该数组,以便我可以显示用户的信息。但我很难将 promise 存储在变量中而不弄乱 Controller 中的结果(不会打印成功)。
Controller .js
UserProfile.getProfile(userData).success(function(profile) {
$scope.uProfile = profile;
//invaid input
if ($scope.uProfile == null) {
alert('Invalid Credentials Entered');
//refresh the page
$window.location.reload();
}
else {
var uProfile = $scope.uProfile;
console.log("success");
//console.log(uProfile);
// $state.go('tab.profile',{usrProfile: uProfile}); //Moveto the profile page
}
服务.js
.factory('UserProfile',function($http) {
var profileInfo = {};
var profiles = [];
return {
getProfile: function(data) {
console.log("in service");
var url = 'https://cs496-app3.herokuapp.com/api/person/login/';
var obj = {
'email_address': data.email,
'password': data.password
};
$http.post(url, obj)
.then(function(result){
profiles[0] = result;
console.log(profiles[0]);
return profiles[0];
})
// console.log(profiles[0]);
}
};
});
当我将服务更改为简单时
return $http.post(url, obj)
一切正常,但后来我无法在另一个 Controller 中访问帖子的结果。我怎样才能兑现 promise ?
最佳答案
将您的 services.js 替换为以下代码
.factory('UserProfile',function($http) {
var profileInfo = {};
var profiles = [];
var getProfile = function(data) {
console.log("in service");
var url = 'https://cs496-app3.herokuapp.com/api/person/login/';
var obj = {
'email_address': data.email,
'password': data.password
};
$http.post(url, obj)
.then(function(result){
profiles[0] = result;
console.log(profiles[0]);
/***********removed and placed below********************/
})
return profiles[0];
// console.log(profiles[0]);
}
return {
getProfile:getProfile
};
});
说明:根据您的代码,您有
$http.post(url, obj)
.then(function(result){
profiles[0] = result;
console.log(profiles[0]);
return profiles[0];
})
return 位于 then 函数内部,并且不是由工厂方法返回。 默认情况下, Angular 工厂应该返回一个 promise 。 所以
return profiles[0];
将其放在 http.post 之外即可解决。 更改实现的格式是一种良好做法,但不是强制性的
关于javascript - 如何存储 POST 请求的结果以在 Ionic 和 Angular 中的另一个 Controller 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40901912/