在expressJS中如何创建一个缓存,使多个请求等待相同的promise [重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在expressJS中如何创建一个缓存,使多个请求等待相同的promise [重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
我有快递端点。
app.get('/',(req,res)=>{
Promise.all(fetch(url1),fetch(url2))
.then(i=>res.send(i=))
})
我想制作一个缓存,以避免每隔15秒发出一次请求。让我们说它需要5秒才能完成两次获取。
如果我像这样做一个简单的缓存:
const cache={};
app.get('/',(req,res)=>{
if(cache['mykey']==undefined
|| cache['mykey'].timestamp>new Date().getTime()-15000){
// make or refresh cache;
Promise.all(fetch(url1),fetch(url2))
.then(i=>{
cache['mykey'].timestamp=new Date().getTime();
cache['mykey'].value=i
return i;
})
.then(i=>res.send(i))
}else{
res.send(cache['mykey'].value);
// or res.status(304).send()
}
}
如果在缓存刷新阶段中发出2个或更多请求,则无效。如何每15分钟只刷新一个缓存?
希望我很清楚。
答案
这是一个未经测试的大纲:
let cache = false
app.get('/', function(req, res) {
cache = cache || Promise.all([
fetch('url1'),
fetch('url2')
]).then(results => {
setTimeout(() => cache = false, 15 * 1000);
return results;
});
const result = cache
result.then(([result1, result2]) => {
res.json({ result1, result2 });
});
});
以上是关于在expressJS中如何创建一个缓存,使多个请求等待相同的promise [重复]的主要内容,如果未能解决你的问题,请参考以下文章