“承诺”缓存的响应

时间:2014-08-22 08:49:02

标签: javascript promise q

我有一个返回promise的异步函数。在第一次完成该功能时,我正在缓存响应。在后续调用中,如果缓存响应可用,我希望使用它。我如何构建实现此行为的承诺?

这样的事情会起作用吗?

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);

1 个答案:

答案 0 :(得分:4)

嗯,这会有点工作。

可能很容易:

if(this.cachedResult) {
    return $q.when(this.cachedResult)
}
var that = this
return getFromService().then(function(res){
    that.cachedResult = res
    return res;
})

而不是构造函数位。虽然这打开了比赛条件的大门(如果在你等待第一个结果的同时提出5次请求怎么办?将提出五个请求。

所以最好缓存承诺

var cache = null
function myFunction(){
    return cache || (cache = getFromService())
}

哪个更短,更优雅,更不容易出现竞争条件。