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