2017-07-08 28 views
0

私のコントローラーで私は私のサービスでこの関数を呼び出しています。 idservice.getid() 私はconsole.log(idservice.getid())コールオン関数は最初の呼び出しで未定義を返します

を使用してコンソールにそれを印刷して、それをテストしてい、それは最初の時間をundefinedを返しますが、私は再びそれを呼び出す場合は、その後、それは値を返します。

これは非同期の問題ですが、この作業を行う方法がわかりません。

私のサービスは以下の通りです:最初の呼び出し時に、それはundefinedを返すdoes notのように

function idservice (userauth) { 

var id; 

    this.getid = function() { 
    userauth.currentUser().then(function(user) { 
     id = user.id; 
    }); 

    return id 
    } 
} 

は、どのように私はそれを行うことができますか?これは非同期の問題ですか?

+0

これはどのようにこれは、問題ではありませんそれがプログラムされています:IDはまだ分かっていないので、それを修正することはできませんが、その代わりに反応することができるので、未定義を返します – smnbbrv

+0

代わりにそれに反応するのはどういう意味ですか? @smnbbrvありがとう! – user3398034

+0

その中から帰ってきたIDとそれを 'キャッチ'するか失敗したレスポンスと適切なレスポンスを返す – Shantanu

答えて

0

これは、httpコールと応答( 'user.id')を作成しているuserauth currentUser()メソッドがまだ使用できないために起こります。 getaut()メソッド内のuserauth.currentUser()コールを返すこともできます。&また、成功コールバックの中にidを返します。だからあなたのサービスメソッドが

function idservice (userauth) { 

var id; 

    this.getid = function() { 
    return userauth.currentUser().then(function(user) { 
       id = user.id; 
       return id; 
      }); 

    } 
} 

のようになります。そして、コントローラ内部であなたが

idservice.getid().then(function(response){ 
    $scope.id = response; 
}); 

のようにそれを処理する必要がありますここにあなたの要件の小さな例です:https://plnkr.co/edit/bEjR9e179aRPfJiaQpei?p=preview

関連する問題