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;
}