我有一个返回承诺的async函数。在函数第一次完成时,我缓存响应。在随后的调用中,如果有缓存的响应可用,我希望使用它。我该如何构建一个承诺来实现这种行为?
这样的东西可以工作吗?
if(this.cachedResult) {
return $q(function(resolve, reject) {
resolve(this.cachedResult);
}).then(success.bind(this));
}
return this.myService.getSomethingAsync()
.then(success.bind(this))
.fail(fail);
还可以。
这很容易:
if(this.cachedResult) {
return $q.when(this.cachedResult)
}
var that = this
return getFromService().then(function(res){
that.cachedResult = res
return res;
})
代替构造函数位。虽然这为竞争条件打开了大门(如果在等待第一个结果时发出5次请求怎么办?)有5个请求。
所以最好缓存 promise:var cache = null
function myFunction(){
return cache || (cache = getFromService())
}