Javascript 如何将POST请求的结果存储在另一个控制器的IONAL和Angular中

Javascript 如何将POST请求的结果存储在另一个控制器的IONAL和Angular中,javascript,angularjs,ionic-framework,Javascript,Angularjs,Ionic Framework,好吧,这是我第一次尝试使用承诺,所以请容忍我。这个问题建立在我的问题之上。本质上,我正在进行基本的用户身份验证,我创建了一个服务,向数据库发出post请求,以确认输入了有效的登录信息。我想做的是将POST请求的响应存储在一个数组中,稍后我可以在我的配置文件页面中访问该数组,以便显示用户的信息。但我很难将承诺存储在变量中,而不会在控制器中弄乱结果(不会打印成功) controller.js UserProfile.getProfile(userData).success(function(pro

好吧,这是我第一次尝试使用承诺,所以请容忍我。这个问题建立在我的问题之上。本质上,我正在进行基本的用户身份验证,我创建了一个服务,向数据库发出post请求,以确认输入了有效的登录信息。我想做的是将POST请求的响应存储在一个数组中,稍后我可以在我的配置文件页面中访问该数组,以便显示用户的信息。但我很难将承诺存储在变量中,而不会在控制器中弄乱结果(不会打印成功)

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
          }
services.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)

一切正常,但随后我无法在另一个控制器中访问帖子的结果。如何存储承诺?

用以下代码替换您的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 factory应返回一个承诺。 所以

把它放在http.post之外就行了。
作为一种良好做法,您的实现的格式已更改,但不是强制性的

请使用以下代码替换您的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 factory应返回一个承诺。 所以

把它放在http.post之外就行了。 作为一种良好做法,您的实现的格式已更改,但不是强制性的