在 angular js 中解析 promise 并将其设置为另一个工厂

Resolve promise in angular js and set it for another 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();
        }

    };

}]);

我的用户工厂中有一些数据,User.get()将重新运行这些数据。 我需要从分配给此 user: null

的 UserData 工厂重新运行此数据

解决方案:

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

我假设您想使用缓存版本(如果 factory.user 已经填充,则只需 return 值)。如果不是这种情况,您可以删除缓存部分。

此外,我不知道您是否希望将用户变量公开为工厂的一部分。如果不是这种情况,您可能只想将其声明为变量(并更改 _factory.user 引用)以隐藏内部实现细节。