2017-06-12 1 views
0

J'ai une usine suivantResolve promesse dans js angulaire et fixé pour une autre usine

.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(); 
     } 

    }; 

}]); 

J'ai quelques données dans mon usine utilisateur, User.get() se retrun les données. J'ai besoin de retrun ces données de mon usine de UserData attribuer à cette user: null

+0

Pouvez-vous s'il vous plaît fournir le code pour la fonction 'User.get()'? Est-ce qu'il rend une promesse? – CodeWarrior

+0

la version de angulaire? – alphapilgrim

+0

oui il recule une promesse – Nakul

Répondre

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

Je suppose que vous voulez utiliser une version en cache (juste retour valeur si factory.user est déjà peuplée). Vous pouvez simplement supprimer la partie de mise en cache si ce n'est pas le cas.

En outre, je ne sais pas si vous souhaitez exposer la variable utilisateur dans le cadre de l'usine. Si ce n'est pas le cas, vous pouvez simplement le déclarer en tant que variable (et modifier les références _factory.user également) pour masquer les détails d'implémentation internes.