javascript - "Promisifying"缓存响应

标签 javascript promise q

我有一个返回 promise 的异步函数。在函数第一次完成时,我正在缓存响应。在后续调用中,如果缓存响应可用,我希望使用它。我如何构建实现此行为的 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);

最佳答案

好吧,这会有点用。

这很容易:

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())
}

它更短、更优雅且不易出现竞争条件。

关于javascript - "Promisifying"缓存响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25443041/

相关文章:

javascript - 打破 Promise 链

javascript - 多个元素的条件渲染

c# - 如何在 ASP MVC 中选中复选框时禁用 DropDownList

javascript - 如何禁用 JavaScript 中的 href 链接?

javascript - Axios 返回未决 promise

javascript - 如何链接来自不同 Controller /位置的 AngularJS Promise?

javascript - 使用 Cypress 从列表框中提取值

promise - 如何从 angular2-modal 或通常从 ng2-components 返回结果

javascript - 如何同步链接 q.nf 调用

javascript - 带有函数定义的 coffeescript promise 链接