Как удалить несколько открытых кеша из сервисного работника - PullRequest
0 голосов
/ 31 октября 2019

Я работал над проектом 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 ]

0 голосов
/ 02 ноября 2019

Ваш код выглядит уже хорошо. В моем случае для удаления кэшей SW я использую следующий код:

if ('caches' in window) {
 caches.keys().then(function(cacheNames) {
   return Promise.all(
     cacheNames.filter(function(cacheName) {
      // You can have some logic here. If you retur TRUE
      // the cache will be deleted.
     }).map(function(cacheName) {
       return caches.delete(cacheName);
     })
   );
 })
}

Метод caches.keys() возвращает ключи CacheStorage, интерфейса, представляющего хранилище для объектов Cache, к которым может обращатьсяработник службы.

Я написал статью о работниках службы и стратегиях кэширования , если вы хотите углубить тему.

0 голосов
/ 04 ноября 2019

попробуйте это:

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

  event.waitUntil(

    //wholesale purge of previous version caches
    caches.keys().then( cacheNames => {
      cacheNames.forEach( value => {

          caches.delete( value );

      } );

    } );

} );
0 голосов
/ 01 ноября 2019

Не эксперт, но я думаю, что использование фильтра, как это будет работать.

 cacheNames.filter(cacheName => {
          if (cacheWhitelist.indexOf(cacheName) === -1) {
            return caches.delete(cacheName);
          }
...