为了账号安全,请及时绑定邮箱和手机立即绑定

如何从 Service Worker 中删除多个打开的缓存

如何从 Service Worker 中删除多个打开的缓存

拉风的咖菲猫 2021-12-12 10:41:32
我一直在研究 pwa 项目,我打开了两个缓存,一个是静态缓存,另一个是动态缓存,我可以使用此代码一次删除一个缓存self.addEventListener('activate', event => {  console.log('Activating new service worker...');  const cacheWhitelist = [staticCacheName];  event.waitUntil(    caches.keys().then(cacheNames => {      return Promise.all(        cacheNames.map(cacheName => {          if (cacheWhitelist.indexOf(cacheName) === -1) {            return caches.delete(cacheName);          }        })      );    })  );});我想同时删除两个缓存
查看完整描述

3 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

您的代码看起来已经不错了。就我而言,我使用以下代码删除 SW 缓存:


if ('caches' in window) {

 caches.keys().then(cacheNames => {

   return Promise.all(

     cacheNames.filter(cacheName => {


      // You can have some custom logic here, if you want

     // to delete only some caches


      // If you return TRUE, the cache will be deleted

      }).map(cacheName => {

       return caches.delete(cacheName);

     })

   );

 })

}

该caches.keys()方法返回 CacheStorage 的键,该接口表示 Service Worker 可以访问的 Cache 对象的存储。



查看完整回答
反对 回复 2021-12-12
?
智慧大石

TA贡献1946条经验 获得超3个赞

试试这个:


self.addEventListener( "activate", event => {


  event.waitUntil(


    //wholesale purge of previous version caches

    caches.keys().then( cacheNames => {

      cacheNames.forEach( value => {


          caches.delete( value );


      } );


    } );


} );


查看完整回答
反对 回复 2021-12-12
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

不是专家,但我认为使用这样的过滤器会起作用。


 cacheNames.filter(cacheName => {

          if (cacheWhitelist.indexOf(cacheName) === -1) {

            return caches.delete(cacheName);

          }


查看完整回答
反对 回复 2021-12-12
  • 3 回答
  • 0 关注
  • 320 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信