0
我需要一個將返回布爾值的函數。第一次調用這個函數時,它應該從一個異步服務(返回一個promise)中加載這個值,然後對其進行緩存。隨後對此函數的調用應該返回緩存的值。問題是這個函數的調用者應該被阻塞直到它獲得一個值。在這種情況下最好的解決方案是什麼?該函數是否應該以任何方式返回承諾(即是否緩存),並將需要阻塞的所有內容放入promise.then()中。如果這是一個很好的解決方案,那麼在這兩種情況下如何返回承諾(例如,何時緩存)?Angularjs承諾封鎖解決方案
下面是一些代碼,以更好地說明問題:
function isSomethingStored() {
if(getFromBrowserStorage() != null) {
var deferred = $q.defer();
deferred.resolve(true);
return deferred.promise;
}
var promise = ThirdParty.getSomethingThroughAjax();
promise.then(function(theSomething) {
addToBrowserStorage(theSomething);
return true;
});
return promise;
}
function caller() {
var promise = isSomethingStored();
promise.then(function(isReady) {
//we can continue
});
}
是的,它應該總是返回一個承諾,以保持一致性。但功能已經內置到角度,只需使用角度的緩存 – SoluableNonagon 2014-12-01 21:16:26
http://stackoverflow.com/questions/14117653/how-to-cache-an-http-get-service-in-angularjs和https:// docs。 angularjs.org/api/ng/service/$http(搜索緩存) – SoluableNonagon 2014-12-01 21:18:11
$ http.get(url,{cache:true})。success(...); – SoluableNonagon 2014-12-01 21:18:32