如何在服务中使用 Promise AngularJS?示例数据 Firebase

How to use Promise in Service AngularJS? Sample Data Firebase

这是我的 service.js 文件:

    angular.module('starter.services', [])
    .factory('firebaseData', function() {
       return {
          refUserFacebook: function (userUid) {
            var firebaseRef =  new Firebase("https://sweltering-heat-772.firebaseio.com/users/");
            var user;
            firebaseRef.once('value', function(dataSnapshot) {
                var users = dataSnapshot.val();
                var userKeys = Object.keys(users);
                for (var i = 0, len = userKeys.length; i < len; i ++){
                    if (users[userKeys[i]].uid == userUid){
                        user = users[userKeys[i]];
                    }
                }
                console.log(user);
                return user;
            });
          }
        }
     })

这是我的控制器文件名item.js文件

angular.module('starter.controllers.item', [])

.controller('ItemCtrl', function($scope, firebaseData) {

    var ref = firebaseData.ref();
    var userUid = ref.getAuth();
    var user = firebaseData.refUserFacebook(userUid.uid);
    console.log(user);

})

当然,我会先在 item.js 控制器中获取 undefined,然后在服务 return 中获取用户。

我真的很想在我的控制器中使用 Promise 技术,以 return 从服务中获得用户价值。

在 item.js 文件中,它类似于:

firebaseData.refUserFacebook(userUid.uid).then(function(user){
   console.log(user); //Promise after retrieving value from service.js
});

如有任何帮助,我们将不胜感激。

谢谢

下次您应该至少提供一些您尝试的代码...但这就是您想要的:

angular.module('starter.services', [])
.factory('firebaseData', function($q) {
   return {
      refUserFacebook: function (userUid) {
        var firebaseRef =  new Firebase("https://sweltering-heat-772.firebaseio.com/users/");
        var user;
        var deferred = $q.defer();
        firebaseRef.once('value', function(dataSnapshot) {
            var users = dataSnapshot.val();
            var userKeys = Object.keys(users);
            for (var i = 0, len = userKeys.length; i < len; i ++){
                if (users[userKeys[i]].uid == userUid){
                    user = users[userKeys[i]];
                }
            }
            console.log(user);
            deferred.resolve(user);
        });
        return deferred.promise;
      }
    }
 })