【发布时间】:2022-09-10 21:51:00
【问题描述】:
在这里需要服务人员的一些指导。
安装服务工作者时,它会缓存资产。在下一次重新加载时,当任何请求被发出时,它会被 service worker 拦截,它首先检查缓存,如果没有找到,然后我们进行网络调用。但是第二次网络调用再次被服务工作者拦截,因此它变成了一个无限循环。
我不希望下一个 fetch 调用再次被拦截。我希望我能够在这里解释这个问题。
这是 serviceWorker.js
const cacheVersion = \"v11\";
self.addEventListener(\'install\',(event)=>{
self.skipWaiting();
event.waitUntil(caches.open(cacheVersion).then((cache)=>{
cache.addAll([
\'/\',
\'/index.html\',
\'/style.css\',
\'/images/github.png\',
])
.then(()=>console.log(\'cached\'),(err)=>console.log(err));
}))
})
self.addEventListener(\'activate\',event=>{
event.waitUntil(
(async ()=>{
const keys = await caches.keys();
return keys.map(async (cache)=>{
if(cache !== cacheVersion){
console.log(\"service worker: Removing old cache: \"+cache);
return await caches.delete(cache);
}
})
})()
)
})
const cacheFirst = async (request) => {
try{
const responseFromCache = await caches.match(request);
if (responseFromCache) {
return responseFromCache;
}
}
catch(err){
return fetch(request);
}
return fetch(request);
};
self.addEventListener(\"fetch\", (event) => {
event.respondWith(cacheFirst(event.request));
});