async makeRequest()

in workbox-v4.3.1/workbox-strategies.dev.js [489:562]


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

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

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

      const promises = [];
      let timeoutId;

      if (this._networkTimeoutSeconds) {
        const {
          id,
          promise
        } = this._getTimeoutPromise({
          request,
          event,
          logs
        });

        timeoutId = id;
        promises.push(promise);
      }

      const networkPromise = this._getNetworkPromise({
        timeoutId,
        request,
        event,
        logs
      });

      promises.push(networkPromise); // Promise.race() will resolve as soon as the first promise resolves.

      let response = await Promise.race(promises); // If Promise.race() resolved with null, it might be due to a network
      // timeout + a cache miss. If that were to happen, we'd rather wait until
      // the networkPromise resolves instead of returning null.
      // Note that it's fine to await an already-resolved promise, so we don't
      // have to check to see if it's still "in flight".

      if (!response) {
        response = await networkPromise;
      }

      {
        logger_mjs.logger.groupCollapsed(messages.strategyStart('NetworkFirst', 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
        });
      }

      return response;
    }