暂停http请求直到缓存已准备就绪而不进行轮询

时间:2013-07-05 07:35:06

标签: javascript node.js caching

我有一个用例,我的http请求正缓存服务器上的中间结果。 如果缓存不存在,则请求通过请求另一个服务器来构建它。

使用AJAX到节点服务器连续触发(循环)这些请求,请求数量可以在50到500之间。

问题: 由于请求是在循环中进行的,并且缓存已经不存在,因此首先几个都尝试构建缓存,有时后续请求会找到半构建的缓存,这会返回错误的结果。

我可以通过民意调查解决这个问题:

(function next(){
    if(!wait){
       fs.readFile(cacheFile, function(err){
           if(err) {
               wait = true;
               createCache(); // sets wait = false;
           } else {
               useCache();
           }
       });
    } else {
        setTimeout(next,waitTime);
    }
})();

我的查询: 请求可以在没有轮询的情况下暂停,并且只在第一个请求完成缓存构建过程后才继续吗?

1 个答案:

答案 0 :(得分:2)

是的,它可以与Futures / Promise结合使用。你可以拿这个one。 在范围之外定义var cachePromise,您可以使用以下内容:

if (!cachePromise) {
  cachePromise = require('future').create()
  buildCache(function() {
    cachePromise.fulfill();
  });
}

cachePromise.when(next); // this one triggers next route in middleware stack

将路由堆栈中的代码放在产生结果的路由之前,你就可以了。

感谢。