仅当对象中存在该文件时,Javascript服务工作者才会获取该文件
我知道这不是最好的做法,但我想这样做。 我想等待文件存在于对象中,这是我的代码:仅当对象中存在该文件时,Javascript服务工作者才会获取该文件,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
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);
}
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);
});
}
我不想显示错误并继续调用同一个文件,而是想调用该函数一次,并保持每3秒循环一次,直到文件添加到localCache
中,然后返回它。
还有其他代码将文件添加到
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);
}
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]);
}