如何使用Promise in Service AngularJS?示例Data Firebase

How to use Promise in Service AngularJS? Sample Data Firebase

本文关键字:示例 Data Firebase AngularJS Service 何使用 Promise in      更新时间:2023-09-26

这是我的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,然后在服务中返回user。

我真的很想在我的控制器中使用Promise技术,从服务中返回用户价值。

在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;
      }
    }
 })