ServiceWorkerGlobalScope: fetch event

The fetch event is fired when the fetch() method is called.

This event is not cancelable and does not bubble.


Use the event name in methods like addEventListener(), or set an event handler property.

addEventListener("fetch", (event) => {});

onfetch = (event) => {};

Event type


This code snippet is from the service worker prefetch sample (see prefetch example live.) The onfetch event handler listens for the fetch event. When fired, the code returns a promise that resolves to the first matching request in the Cache object. If no match is found, the code fetches a response from the network.

The code also handles exceptions thrown from the fetch() operation. Note that an HTTP error response (e.g., 404) will not trigger an exception. It will return a normal response object that has the appropriate error code set.

self.addEventListener("fetch", (event) => {
  console.log(`Handling fetch event for ${event.request.url}`);

    caches.match(event.request).then((response) => {
      if (response) {
        console.log("Found response in cache:", response);
        return response;
      console.log("No response found in cache. About to fetch from network…");

      return fetch(event.request)
        .then((response) => {
          console.log("Response from network is:", response);

          return response;
        .catch((error) => {
          console.error(`Fetching failed: ${error}`);
          throw error;


Service Workers
# dom-serviceworkerglobalscope-onfetch

Browser compatibility

BCD tables only load in the browser

See also