mirror of
https://github.com/angular/angular
synced 2026-05-24 09:28:37 +00:00
fix(service-worker): throw a critical error when handleFetch fails (#51885)
On Safari, the cache might fail on methods like `match` with an `Internal error`. Critical errors allows to fallback to `safeFetch()` in the `Driver`. fixes: #50378 PR Close #51885
This commit is contained in:
parent
8be2c48b7c
commit
dcaad169ec
1 changed files with 11 additions and 1 deletions
|
|
@ -128,7 +128,17 @@ export abstract class AssetGroup {
|
|||
|
||||
// Look for a cached response. If one exists, it can be used to resolve the fetch
|
||||
// operation.
|
||||
const cachedResponse = await cache.match(req, this.config.cacheQueryOptions);
|
||||
let cachedResponse: Response|undefined;
|
||||
try {
|
||||
// Safari 16.4/17 is known to sometimes throw an unexpected internal error on cache access
|
||||
// This try/catch is here as a workaround to prevent a failure of the handleFetch
|
||||
// as the Driver falls back to safeFetch on critical errors.
|
||||
// See #50378
|
||||
cachedResponse = await cache.match(req, this.config.cacheQueryOptions);
|
||||
} catch (error) {
|
||||
throw new SwCriticalError(`Cache is throwing while looking for a match: ${error}`);
|
||||
}
|
||||
|
||||
if (cachedResponse !== undefined) {
|
||||
// A response has already been cached (which presumably matches the hash for this
|
||||
// resource). Check whether it's safe to serve this resource from cache.
|
||||
|
|
|
|||
Loading…
Reference in a new issue