我有一个带有多个缓存的服务工作者的站点,这些缓存有不同原因使用的文件。我可以根据需要从我的程序中清除(或删除)一个特定的缓存,而不是从服务工作者本身清除(或删除)。这就是我尝试过的:
async function clearCache(cacheName) {
if ('caches' in window) {
return await caches.delete(cacheName);
}
}
我可以从窗口对象获取缓存,但似乎无法删除它。我也试过循环缓存并单独删除所有文件,但这也不起作用。
这可能吗?
答案 0 :(得分:2)
是的,该代码应该删除缓存。 (您可以通过省略async/await
来简化它,因为代码已经返回了一个承诺,但这并不重要。)
如果您没有立即看到缓存消失,那么可能的是,范围中的另一个变量是维护对缓存的打开实例的引用。根据{{3}}:
注意:在此步骤之后,现有的DOM对象(即当前引用的Cache,Request和Response对象)应保持正常运行。
在实践中,这意味着如果您在某个地方有一个cacheName
的开放实例,则删除不会发生,直到它关闭或超出范围。