0

I have a following factory

.factory('UserData', ['User', '$q', function(User, $q) {
    var deferred = $q.defer();

    return {
        user: null,
        get: function() {
            var _this = this;
            _this.user = User.get();
            deferred.resolve(User.get());
            return deferred.promise();
        }

    };

}]);

I have some data in my User factory , User.get() will retrun the data. I need to retrun this data from my UserData factory assigning to this user: null

Nakul
  • 35
  • 5

1 Answers1

0

Solution:

.factory('UserData', ['User', '$q', function(User, $q) {
   var _factory = {};

   _factory.user = null;

   /* returns a promise that resolves to user value */
   _factory.get = function() {
     // return cached user as a resolved promise
     if (_factory.user) return $q.resolve(_factory.user);

     return User.get().then(function(user) { // chain User.get() promise
       return _factory.user = user; // cache user value in _factory.user
     });
   };

   return _factory;
}]);

I'm assuming you want to use a cached version (just return value if factory.user is populated already). You can just remove the caching part if that's not the case.

Also, I don't know if you'd want to expose the user variable as part of the factory. If that's not the case you might just want to declare it as a variable instead (and change _factory.user references as well) to hide internal implementation details.

geofrey
  • 466
  • 3
  • 12