"Promisifying"缓存的响应



我有一个返回承诺的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())
}

相关内容

  • 没有找到相关文章

最新更新