async makeRequest()

in workbox-v4.3.1/workbox-strategies.dev.js [934:1012]


    async makeRequest({
      event,
      request
    }) {
      const logs = [];

      if (typeof request === 'string') {
        request = new Request(request);
      }

      {
        assert_mjs.assert.isInstance(request, Request, {
          moduleName: 'workbox-strategies',
          className: 'StaleWhileRevalidate',
          funcName: 'handle',
          paramName: 'request'
        });
      }

      const fetchAndCachePromise = this._getFromNetwork({
        request,
        event
      });

      let response = await cacheWrapper_mjs.cacheWrapper.match({
        cacheName: this._cacheName,
        request,
        event,
        matchOptions: this._matchOptions,
        plugins: this._plugins
      });
      let error;

      if (response) {
        {
          logs.push(`Found a cached response in the '${this._cacheName}'` + ` cache. Will update with the network response in the background.`);
        }

        if (event) {
          try {
            event.waitUntil(fetchAndCachePromise);
          } catch (error) {
            {
              logger_mjs.logger.warn(`Unable to ensure service worker stays alive when ` + `updating cache for '${getFriendlyURL_mjs.getFriendlyURL(request.url)}'.`);
            }
          }
        }
      } else {
        {
          logs.push(`No response found in the '${this._cacheName}' cache. ` + `Will wait for the network response.`);
        }

        try {
          response = await fetchAndCachePromise;
        } catch (err) {
          error = err;
        }
      }

      {
        logger_mjs.logger.groupCollapsed(messages.strategyStart('StaleWhileRevalidate', request));

        for (let log of logs) {
          logger_mjs.logger.log(log);
        }

        messages.printFinalResponse(response);
        logger_mjs.logger.groupEnd();
      }

      if (!response) {
        throw new WorkboxError_mjs.WorkboxError('no-response', {
          url: request.url,
          error
        });
      }

      return response;
    }