From 28abc2bc6e75c3b6d77179807d23ecea85eed87c Mon Sep 17 00:00:00 2001 From: ayoayco Date: Mon, 19 Aug 2024 12:31:07 +0200 Subject: [PATCH] fix: sw held back by network request for updating cached assets --- src/sw.mjs | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/src/sw.mjs b/src/sw.mjs index ad4cd9a..210375e 100644 --- a/src/sw.mjs +++ b/src/sw.mjs @@ -44,28 +44,20 @@ const cacheAndRevalidate = async ({ request, preloadResponsePromise, fallbackUrl // Try get the resource from the cache const responseFromCache = await cache.match(request); - try { - // get network response for revalidation of stale assets - const responseFromNetwork = await fetch(request.clone()); + if (responseFromCache) { + logInfo('using cached response...', { force: forceLogging, context: 'cozy-sw', data: responseFromCache.url }) + return responseFromCache; + } + + // get network response for revalidation of cached assets + fetch(request.clone()).then((responseFromNetwork) => { if (responseFromNetwork) { logInfo('updated cached resource...', { force: forceLogging, context: 'cozy-sw', data: responseFromNetwork.url }) putInCache(request, responseFromNetwork.clone()); } - - if (responseFromCache) { - logInfo('using cached response...', { force: forceLogging, context: 'cozy-sw', data: responseFromCache.url }) - return responseFromCache; - } else { - logInfo('using network response...', { force: forceLogging, context: 'cozy-sw', data: responseFromNetwork.url }) - return responseFromNetwork; - } - } catch (error) { - logInfo('failed to fetch updated resource', { force: forceLogging, context: 'cozy-sw', data: request.url }) - if (responseFromCache) { - logInfo('using cached response', { force: forceLogging, context: 'cozy-sw', data: responseFromCache.url }) - return responseFromCache; - } - } + }).catch((error) => { + logError('failed to fetch updated resource', { force: forceLogging, context: 'cozy-sw', data: error }) + }); // Try to use the preloaded response, if it's there // NOTE: Chrome throws errors regarding preloadResponse, see: