2017-06-12 47 views
0

我有以下工廠解決的承諾,並將其設置爲另一家工廠

.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()將retrun數據。 我需要從我的UserData工廠分配給這user: null

+0

您能否提供函數'User.get()'的代碼?它是否回覆了承諾? – CodeWarrior

+0

角度的版本? – alphapilgrim

+0

是的,它正在兌現承諾 – Nakul

回答

0

解決方案retrun這樣的數據:

.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已填充)。如果情況並非如此,您可以刪除緩存部分。

此外,我不知道是否要將用戶變量作爲工廠的一部分公開。如果不是這種情況,您可能只想將其聲明爲一個變量(並更改_factory.user引用)以隱藏內部實現細節。

相關問題