javascript - 如何存储 POST 请求的结果以在 Ionic 和 Angular 中的另一个 Controller 中使用

标签 javascript angularjs ionic-framework

好吧,我是第一次尝试使用 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/

相关文章:

javascript - 我怎样才能让 jquery datepicker 不工作克隆行

javascript - 在跨站点域中自动登录

javascript - 在 JavaScript 中更改图像源

cordova - 任务 :processDebugResources [ Cordova/Ionic ] 执行失败

javascript - 使用 jQuery 切换 div 的显示

javascript - Angular 自定义指令数据绑定(bind)

javascript - 如何使用 jquery 追加包含 Angular Directive(指令)的元素

html - 有人可以解释一下 css 中称为 dots-per-CSS-inch 而不是 dots-per-physical-inch 的错误吗

javascript - 单击按钮后为拖放angularjs实现CSS3样式

javascript - 防止 input[type=number] 自动舍入浮点值