Skip to content

Instantly share code, notes, and snippets.

@jgw96
Forked from surma/staleWhileRevalidate.js
Created October 22, 2016 17:12
Show Gist options
  • Save jgw96/cd096230033982c5d38d5919997697be to your computer and use it in GitHub Desktop.
Save jgw96/cd096230033982c5d38d5919997697be to your computer and use it in GitHub Desktop.
// Implements stale-while-revalidate
self.addEventListener('fetch', event => {
const cached = caches.match(event.request);
const fetched = fetch(event.request);
// Call respondWith() with whatever we get first.
// If the fetch fails (e.g disconnected), wait for the cache.
// If there’s nothing in cache, wait for the fetch.
// If neither yields a response, return a 404.
event.respondWith(
Promise.race([fetched.catch(_ => cached), cached])
.then(resp => resp || fetched)
.catch(_ => new Response(null, {status: 404}))
);
// Update the cache with the version we fetched
event.waitUntil(
Promise.all([fetched, caches.open('cache-v1')])
.then(([response, cache]) => cache.put(event.request, response))
.catch(_ => {/* eat any errors */})
);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment