2016-12-01 2 views
1

私は初めて約束を使用しようとしています。この質問は私の質問How to pass results from POST request to another page in Ionic and Angularに基づいています。本質的に私は基本的なユーザー認証を行い、有効なログイン情報が入力されたことを確認するためにデータベースへのポストリクエストを作成するサービスを作成しました。私がしたいのは、POSTリクエストからの応答を後でプロファイルページでアクセスできる配列に格納して、ユーザーの情報を表示できるようにすることです。しかし、コントローラに結果を邪魔することなく、約束事を変数に格納するのは苦労しています(成功は印刷されません)。POSTからの結果を格納する方法IonicとAngularの別のコントローラーで使用する要求

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) 

私のサービスを変更すると、すべてが正常に動作しますが、その後、私は結果にアクセスすることはできません後の投稿から別のコントローラにどのように私は約束を保存することができますか?

答えて

0

説明あなたの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 
     }; 

}); 

を交換してください:あなたのコードを1として、あなたが

$http.post(url, obj) 
      .then(function(result){ 
        profiles[0] = result; 
        console.log(profiles[0]); 
        return profiles[0]; 
}) 

リターンを持っているが、関数の内部であり、それはで返されていませんファクトリメソッド。 デフォルトでは、角度ファクトリは1つの約束を返す必要があります。 http.post外にそれを持っ ので

return profiles[0]; 

はうまくいきます。 実装の形式は推奨されていますが、必須ではありません。

関連する問題