我在使用相同服務的頁面上有多個控制器,爲了舉例,我們將調用服務USER。有多個呼叫在Angular上的相同承諾上等待
第一次調用USER.getUser()時,它會執行$ http請求以獲取用戶的數據。通話結束後,它將數據存儲在USER.data中。如果對USER.getUser()進行另一個調用,它將檢查USER.data中是否有數據,如果有數據,則返回而不是進行調用。
我的問題是對USER.getUser()的調用發生得如此之快以至於USER.data沒有任何數據,因此它再次觸發$ http調用。
以下是我對用戶的工廠現在:
.factory("user", function($http, $q){
return {
getUser: function(){
var that = this;
var deferred = $q.defer();
if(that.data){
deferred.resolve(that.data);
} else {
$http.get("/my/url")
.success(function(res){
that.data = res;
deferred.resolve(that.data);
});
}
return deferred.promise;
}
}
});
我希望我的問題是有道理的。任何幫助將非常感激。
「變種userPromise = $ HTTP」 刪除了var – 2015-04-02 19:49:52
是否有一個名字爲這種模式?這是一個很好的。我忽略了很長一段時間,直到我注意到重新使用控制器意味着多次調用相同的服務。 – 2017-02-01 20:34:53
@MuraliVP你現在也可以從參數中刪除$ q :) – obey 2017-08-21 08:28:59