javascript - Javascript 服务工作者仅在文件存在于对象中时获取
问题描述
我知道这不是最佳做法,但我想这样做。我想等待一个文件,直到它存在于一个对象中,这是我的代码:
self.addEventListener('fetch', event => {
event.respondWith(loadFile(event.request.url))
})
async function loadFile (url) {
const name = fileName(url)
if (localCache[name]) {
return new Response(localCache[name])
}
}
这里的问题是当文件不存在时,localCache
我收到一个失败的请求,并且它一直请求相同的文件直到它存在于 中localCache
,每次失败时它都会显示失败请求。我想做的是这样的:
async function loadFile (url) {
const name = fileName(url)
let refreshId = setInterval(function() {
if (localCache[name]) {
return new Response(localCache[name])
clearInterval(refreshId);
}
}, 3000);
}
我不想显示该错误并继续调用同一个文件,而是想调用该函数一次并每 3 秒循环一次,直到添加该文件localCache
然后返回它。还有其他代码可以将文件添加到localCache
. 但有时将所有文件添加到localCache
.
解决方案
你可以尝试这样的事情:
async function loadFile (url) {
const name = fileName(url)
return new Promise((resolve, reject) => {
let refreshId = setInterval(function() {
if (localCache[name]) {
resolve(new Response(localCache[name]));
clearInterval(refreshId);
}
}, 3000);
});
}
或使用等待:
async function sleep(time) {
return new Promise(resolve => setTimeout(resolve, time));
}
async function loadFile (url) {
const name = fileName(url)
while (!localCache[name]) {
await sleep(3000);
}
return new Response(localCache[name]);
}
推荐阅读
- python - Python Selenium 中的错误仅用于加载页面
- power-automate - 如何使用 Power Automate 亲自向 MS Teams 中的多个用户发送欢迎消息
- css - Angular:css变量在组件中不可用
- reactjs - 将 apexcharts 的字体大小标签更改为响应式
- python-3.x - 如何使用列表理解或应用(而不是 iterrows)来迭代数据帧 pandas
- css - 如何在 styled-components 中使用 translateX() 中的道具?
- imagemagick - 如何在imagemagick中叠加两张图像,一张具有透明背景
- scikit-learn - 我应该在 sklearn KFold 交叉验证中输入 shuffle=True 还是 False?
- json - 解析存储为字符串 Spark 的结构列数组
- postgresql - 如何不评估 PostgreSQL CASE 表达式的 ELSE 部分