我有一个应该离线工作的网络应用程序。 为此我使用javascript服务工作者将必要的文件放入缓存中。 如果连接已启动,则会从网络加载所有资源。 如果没有连接,则从缓存加载资源。 这很好。
现在问题是,如果设备上有互联网连接,但服务器已关闭。 然后它永远不会回退到缓存,因为它有一个互联网连接。
这是我在service-worker.js中的fetch事件的代码:
self.addEventListener('fetch', function(event) {
event.respondWith(
fetch(event.request).catch(function() {
return caches.match(event.request);
})
);
});
我的想法是实现一种超时,如果应用程序无法获取内容,请说30秒然后始终使用缓存。 有谁知道如何实现这个?我不符合承诺......
答案 0 :(得分:1)
我猜您的问题是您没有打开缓存实例,然后将请求与该缓存相匹配。您错误地使用了缓存API。
您需要以下内容:
返回caches.open(' my-cache-name')。然后......
我强烈建议你仔细阅读: https://serviceworke.rs/strategy-network-or-cache.html
在同一个网站上有很多不同的SW策略!