在删除Workbox Service Worker中的其他缓存时保留预缓存

问题描述 投票:0回答:1

我正在使用下面的代码清除由工作箱创建的缓存,但是它也会删除由自己工作箱管理的预缓存。

请告诉我是否存在更好的方法。

// Clean up caches in activate event to ensure no pages are using the old caches.
self.addEventListener('activate', (event) => {
    const promiseChain = caches.keys()
        .then((cacheNames) => {
            // Step through each cache name and delete it 
            return Promise.all(
                cacheNames.map((cacheName) => caches.delete(cacheName))
            );
        });

    // Keep the service worker alive until all caches are deleted.
    event.waitUntil(promiseChain);
});
service-worker progressive-web-apps workbox
1个回答
0
投票

下面的代码可以很好地删除其他缓存,同时将预缓存保留在工作盒服务工作程序中。

// Clear old caches
var clearOldCaches = function (event)
{
    event.waitUntil(
        caches.keys().then(function (cacheNames) {
            let validCacheSet = new Set(Object.values(workbox.core.cacheNames));
            return Promise.all(
                cacheNames
                .filter(function (cacheName) {
                    return !validCacheSet.has(cacheName);
                })
                .map(function (cacheName) {
                    return caches.delete(cacheName);
                })
            );
        })
    );
};

self.addEventListener("activate", function (event) {
    clearOldCaches(event);
});
© www.soinside.com 2019 - 2024. All rights reserved.