2016-03-27 35 views
0

私は、ユーザが行うすべての要求に対して、companyid,employeeidなどのような重要なものを取得しようとします。だから、の前にを受け取る必要があります。角度プロミスが動作しない

その後、ユーザーは、すべての要求(get/company/{companyid})で設定したcompanyidに基づいて情報を受け取ります。

私が持っている問題は、companyidを受け取るための応答が(get/company/{companyid})にまだcompanyidがまだないことを依頼しようとしていることです。

私はこの約束を修正しようとしましたが、機能しません。

ここで私は(私はすべての要求を行うことを)利用者に関するいくつかの重要な情報を受信しよう:

サービス

(function() { 
    angular.module('employeeApp') 
     .service('authenticationservice', authenticationservice); 

    function authenticationservice($http,$location,authenticationFactory,$q,GLOBALS,$cookies) { 

     this.validateUser = function() { 
      var vm = this; 
      vm.deferred = $q.defer(); 

      data = {"api_token": api_token}; 

      return $http.post(GLOBALS.url+'show/employee/' + $cookies.get('employeeid'),data) 
       .success(function(response) 
       { 
        vm.deferred.resolve(response); 
       }) 
       .error(function(err,response) 
       { 
        vm.deferred.reject(err); 
       }); 

      return vm.deferred.promise; 
     } 
    } 
})(); 

ルート(私のルートでは、私が使用するファイル を提出すべての重要なユーザー変数を設定するauthenticationservice

employeeAppModule.run([ 
     'authenticationservice', 
     'constants', 
     function(authenticationservice,constants) { 
      authenticationservice.validateUser() 
       .then(function(response) 
       { 
        constants.companyid = response.result.Employee; 
        constants.role = response.result.Role; 
        constants.name = response.result.FirstName; 
        console.log('test'); 
       }, 
       function(response){ 
        console.log('error'); 
       }); 

     } 
    ]); 

問題は、ユーザー情報が遅く設定されていて、angleが既に設定されていないcompanyIdを使用している私のhomeControllerに既に移動していることです。

ありがとう

+0

'$ http'すでにあなたは、単に返すことができます約束を返します。なぜあなたは '$ q'でそれをラップしようとしていますか? – migg

+0

'.success'は推奨されていません。 docs https://docs.angularjs.org/api/ng/service/$http#deprecation-notice – user2950720

+0

を参照してください。返信する前に約束を解決する必要があります:vm.deferred.resolve(); –

答えて

1

return $http.postの問題は、validateUserメソッドに2つのreturn文があります。返信する前に$http.getを返す前にreturn vm.deferred.promise; &カスタムで作成した約束があなたのメソッドから返されない理由を教えてください。最初にreturnを削除して$http.getから問題を修正することはできますが、実装するのが悪いパターンと考えられるため、このような修正を行うことはお勧めしません。

$httpメソッドで約束を利用し、&を使用して、.thenを使用して、チェーンの約束の仕組みにデータを返すといいでしょう。

コード

function authenticationservice($http, $location, authenticationFactory, $q, GLOBALS, $cookies) { 
    this.validateUser = function() { 
    var vm = this; 

    data = { 
     "api_token": api_token 
    }; 

    return $http.post(GLOBALS.url + 'show/employee/' + $cookies.get('employeeid'), data) 
     .then(function(response) { 
     var data = response.data; 
     retrun data; 
    }, function(err) { 
     return $q.reject(err); 
    }); 
    } 
} 
0

は$ HTTPを使用して、コントローラ内のアクションが値を返し、それがボイドアクションではないことを確認する必要があります$約束オブジェクトを返すことを確認します。

関連する問題