Javascript &引用;“允诺”;缓存的响应
我有一个异步函数,它返回一个承诺。在函数第一次完成时,我将缓存响应。在随后的调用中,如果缓存的响应可用,我希望使用它。我怎样才能做出承诺来实现这种行为 你喜欢这个工作吗Javascript &引用;“允诺”;缓存的响应,javascript,promise,q,Javascript,Promise,Q,我有一个异步函数,它返回一个承诺。在函数第一次完成时,我将缓存响应。在随后的调用中,如果缓存的响应可用,我希望使用它。我怎样才能做出承诺来实现这种行为 你喜欢这个工作吗 if(this.cachedResult) { return $q(function(resolve, reject) { resolve(this.cachedResult); }).then(success.bind(this)); } return this.myService.getSo
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次请求
因此,最好将承诺缓存起来:
它既短,更优雅,也不太容易受到比赛条件的影响。好吧,它会起作用的 这很容易:
if(this.cachedResult) {
return $q.when(this.cachedResult)
}
var that = this
return getFromService().then(function(res){
that.cachedResult = res
return res;
})
而不是构造函数位。虽然这打开了竞争条件的大门(如果在等待第一个结果时请求被发出5次会怎么样?将发出5次请求)
因此,最好将承诺缓存起来:
这是我如何使用jQuery的承诺的:也许它可以帮助我使用一个memoize函数这是我如何使用jQuery的承诺的:也许它可以帮助我使用一个memoize函数h,整洁的想法。在缓存的承诺被返回的情况下,承诺何时被解析ed?或者换句话说,是什么触发了承诺的解析,因为我希望每次调用都重新解析它,但使用缓存数据(如果可用)。@Ben:承诺不是“重新解析”(只能解析一次),但它仍然允许您在解析后添加新的处理程序(然后自动调用结果)。解析由
getFromService()中的任何内容触发
在最初的调用中是这样做的。啊,好主意。在返回缓存的承诺的情况下,承诺何时得到解决?或者换句话说,是什么触发承诺的解决,因为我希望每次调用都重新解决它,但使用缓存的数据(如果可用)。@Ben:承诺不是“重新解决”的(它只能被解析一次),但它仍然允许您在解析后添加新的处理程序(并自动调用它们并给出结果)。解析由原始调用中的getFromService()
触发。