2016-04-24 20 views
1

以下のサービスを作成しました。私は下記のコントローラでpersonalKeyの値の結果を取得しようとすると、非同期関数の結果をAngularFireで返す方法

app.factory('userProfileFactory', ['FBDB', 'searchParam', function(FBDB, searchParam) { 
      var personalKey; 
     return { 

      userProfile: function() { 
       var FBref = new Firebase(FBDB).child('items'); 
       FBref.orderByChild('first') 
        .startAt(searchParam) 
        .endAt(searchParam) 
        .once('value', function (snapshot) { 
        var data = snapshot.val(); 

         personalKey = Object.keys(data)[0]; 

         return(personalKey);  
       }); 

       return(personalKey); 

      } 
     }; 
    }]); 

しかし、私は "未定義" を取得:

app.controller('profileCtrl', ['userProfileFactory', function(userProfileFactory) { 

console.log(userProfileFactory.userProfile()) 

}]); 

してくださいアドバイス:)

答えて

3

はい、あなたは$q

から助けを借りて、非同期的な方法でデータを取得しようとしている場所でカスタムの約束を作成できます。

そして、コントローラーは.thenファクトリーファンクションでファクトリー機能を呼び出します。

app.controller('profileCtrl', ['userProfileFactory', function(userProfileFactory) { 
    userProfileFactory.userProfile().then(function(res){ 
     console.log(res); 
    }) 
}]); 
+0

Works Perfectly。とても感謝しています:) –

+0

@JohnCarson喜んでお手伝いします。ありがとう:-) –

+0

@ PankajParkarありがとうございます。私は同じものを探していた。 –

関連する問題