javascript - 在 expressJS 中,如何创建一个缓存,使多个请求等待同一个承诺
问题描述
我有一个快递端点。
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 });
});
});
推荐阅读
- r - R观察strs split - 列中的多个值
- pagination - 如何配置选项以删除 vue-tables-2 中分页的第一个和最后一个按钮
- javascript - 从javascript中的本地文本文件中选择随机行
- amazon-web-services - 我是否需要等待传播以在 AWS Route53 中添加 CNAME 记录
- python - 在 python 3 上为停用词文件 txt 编写
- arrays - 为什么我的二维数组中的 x 值是垂直的而 y 值是水平的
- amazon-dynamodb - DynamoDB Query - GSI
- xamarin - Complte event for Editor behaving like Unfocussed event
- laravel - many to many relationship - save in multiple database column and retrieve
- reactjs - React native 无法从 '10' 确定 java 版本