2016-05-03 16 views
0

私は現在node.jsに基づいてアプリケーションを開発中ですが、サーバー側は正常に動作しているようですが、私は公的な面で苦労しています。AngularJSとの約束を使用する際のトラブル

私はAngularJS コントローラ約束を使用しようとしています。ここに私のコードは次のとおりです。

var userId; 
var userEmail = "somethingICanRecognizeInCaseItDoesntChange"; 

function getUserInfos(){ 
    var deferred = $q.defer(); 
    if(SessionStorageService.get('token')){ 
     Auth.isAlive().success(function(user){ 
      $scope.user = user; 
      console.log("user :", user); 
      console.log("user email :", user.email); 
      deferred.resolve(user.email); 
     }); 
    } 
    else { 
     $scope.user = {}; 
     deferred.resolve([]); 
    } 
    return deferred.promise; 
} 

userEmail = getUserInfos(); 
console.log("result :", userEmail); 

私はコンソールのresultuser emailと同じだろうと思ったが、そうではありません。 console

問題がある、私がしようと何でも、私は結果としてaを持っていることはありません:

result : Object { $$state: Object } 
user : Object { firstName: "super", lastName: "admin", email: "a", isSuperAdmin: true, _ts: "2016-05-03T11:17:06.943Z" } website-ranking.js:41:21 
user email : a 

ここで私は私のブラウザコンソールでObjectをクリックすることで、何を得るのスクリーンショットだ: は、ここでコンソールログです。私はgetUserInfos().$$stategetUserInfos().$$state.valuegetUserInfos().$$state.ObjectgetUserInfos().ObjectgetUserInfos().Object.valueのようなものを試しましたが、どれもうまくいきませんでした。

私はここで何が欠けていますか?私は間違った方法で約束をしていますか?私は何かを忘れていますか?

この質問が改善できるかどうか私に教えてください。私は喜んでコードを追加したり、自分の問題を解決するのに必要な情報を追加します。

編集:問題は、すでに他の場所でほとんどのコードを使用していたことです。私は少し失念していると約束して以来です。ここで例えば、私は何の問題もなくAuth.isAlive()を使用します。

function getUserInfos(cb){ 
      if(SessionStorageService.get('token')){ 
       Auth.isAlive().success(function(user){ 
        $scope.user = user; 
        cb(); 
       }); 
      } 
      else { 
       $scope.user = {}; 
       cb(); 
      } 
     } 

の$ scope.userは無問題のアプリケーションにさらに修正して使用可能です。

質問が重複してタグ付けされているので、私は一口説明したいと思います。私はなぜ私が約束を使用しているのか知っていて、javascriptで非同期のさまざまな問題を理解したと思います。ここで私の問題は、私のコードがうまくいかず、なぜ私が過去に約束をうまく使っていたのか分かりません。私は非同期呼び出しからの応答を得る方法を尋ねていませんが、コードの書き込み中にどこが間違っていたのか理解するのに少し役立ちます。まだ重複していると思う場合は、コメントで私に教えてください。私はそれに対処します。私が提供されたリンクで何かを逃した可能性があります。あなたの方法のgetUserInfosため

+0

私はあなたのAuth.isAlive機能するために必要なコールバックに探してお勧めします。あなたが見ているオブジェクトが適切な応答のように見えず、関数が複数のパラメータを返すことを意味する可能性があります。 –

+0

Joe Clay編集の最後の部分を確認し、重複していると思われる場合は教えてください。 @Stephn_R:以前は何の問題もなく使用して以来Auth.isAlive関数が私の問題を引き起こしているのは不思議です。私の編集をチェックしてください。 – kazu

+0

$ httpまたは$ resourceを使用しているユーザーを取得するリクエストはありますか? Auth.isAliveメソッドのコードを提供してください。 –

答えて

4

()、約束を返しますが、これを行うことができるしている:

var userId; 
var userEmail = "somethingICanRecognizeInCaseItDoesntChange"; 

function getUserInfos(){ 
    var deferred = $q.defer(); 
    if(SessionStorageService.get('token')){ 
     Auth.isAlive().success(function(user){ 
      $scope.user = user; 
      console.log("user :", user); 
      console.log("user email :", user.email); 
      deferred.resolve(user.email); 
     }); 
    } 
    else { 
     $scope.user = {}; 
     deferred.resolve([]); 
    } 
    return deferred.promise; 
} 

getUserInfos().then(function(_email){ 
    userEmail = _email; 
    console.log("result :", userEmail); 
}); 
関連する問題