Last active
February 10, 2018 06:24
-
-
Save zlatkov/87359c13fb8f25fc56c49354c74d21e0 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
self.addEventListener('fetch', function(event) { | |
event.respondWith( | |
// This method looks at the request and | |
// finds any cached results from any of the | |
// caches that the Service Worker has created. | |
caches.match(event.request) | |
.then(function(response) { | |
// If a cache is hit, we can return thre response. | |
if (response) { | |
return response; | |
} | |
// Clone the request. A request is a stream and | |
// can only be consumed once. Since we are consuming this | |
// once by cache and once by the browser for fetch, we need | |
// to clone the request. | |
var fetchRequest = event.request.clone(); | |
// A cache hasn't been hit so we need to perform a fetch, | |
// which makes a network request and returns the data if | |
// anything can be retrieved from the network. | |
return fetch(fetchRequest).then( | |
function(response) { | |
// Check if we received a valid response | |
if(!response || response.status !== 200 || response.type !== 'basic') { | |
return response; | |
} | |
// Cloning the response since it's a stream as well. | |
// Because we want the browser to consume the response | |
// as well as the cache consuming the response, we need | |
// to clone it so we have two streams. | |
var responseToCache = response.clone(); | |
caches.open(CACHE_NAME) | |
.then(function(cache) { | |
// Add the request to the cache for future queries. | |
cache.put(event.request, responseToCache); | |
}); | |
return response; | |
} | |
); | |
}) | |
); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment