Javascript 如何以编程方式清除服务工作者缓存?

Javascript 如何以编程方式清除服务工作者缓存?,javascript,service-worker,Javascript,Service Worker,我有一个带有多个缓存的服务人员的站点,其中的文件用于不同的原因。我希望能够根据需要从我的程序中清除(或删除)一个特定的缓存,而不是从服务工作者本身中。这就是我尝试过的: async function clearCache(cacheName) { if ('caches' in window) { return await caches.delete(cacheName); } } 我可以从窗口对象获取缓存,但似乎无法删除它。我也尝试过在缓存中循环并逐个删除所有文件,但也没有

我有一个带有多个缓存的服务人员的站点,其中的文件用于不同的原因。我希望能够根据需要从我的程序中清除(或删除)一个特定的缓存,而不是从服务工作者本身中。这就是我尝试过的:

async function clearCache(cacheName) {
  if ('caches' in window) {
    return await caches.delete(cacheName);
  } 
}
我可以从窗口对象获取缓存,但似乎无法删除它。我也尝试过在缓存中循环并逐个删除所有文件,但也没有成功


这可能吗?

是的,该代码应该删除缓存。(您可以通过省略
async/await
来简化它,因为代码已经返回了承诺,但这并不重要。)

如果您没有看到缓存立即消失,那么可能是作用域中存在另一个变量,该变量正在维护对缓存的打开实例的引用。根据:

注意:此步骤之后,现有DOM对象(即当前引用的缓存、请求和响应对象)应保持功能

实际上,这意味着如果在某个范围内有一个打开的
cacheName
实例,则只有在该实例关闭或超出范围后才会进行删除