Skip to content

Commit 51984d1

Browse files
authored
Avoid unnecessary console error on fetcher abort due to back-to-back revalidation calls (#12050)
1 parent 0471c02 commit 51984d1

File tree

2 files changed

+15
-14
lines changed

2 files changed

+15
-14
lines changed

.changeset/itchy-shoes-sort.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@remix-run/router": patch
3+
---
4+
5+
Avoid unnecessary `console.error` on fetcher abort due to back-to-back revalidation calls

packages/router/router.ts

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1979,9 +1979,7 @@ export function createRouter(init: RouterInit): Router {
19791979
}
19801980

19811981
revalidatingFetchers.forEach((rf) => {
1982-
if (fetchControllers.has(rf.key)) {
1983-
abortFetcher(rf.key);
1984-
}
1982+
abortFetcher(rf.key);
19851983
if (rf.controller) {
19861984
// Fetchers use an independent AbortController so that aborting a fetcher
19871985
// (via deleteFetcher) does not abort the triggering navigation that
@@ -2022,6 +2020,7 @@ export function createRouter(init: RouterInit): Router {
20222020
abortPendingFetchRevalidations
20232021
);
20242022
}
2023+
20252024
revalidatingFetchers.forEach((rf) => fetchControllers.delete(rf.key));
20262025

20272026
// If any loaders returned a redirect Response, start a new REPLACE navigation
@@ -2049,7 +2048,6 @@ export function createRouter(init: RouterInit): Router {
20492048
let { loaderData, errors } = processLoaderData(
20502049
state,
20512050
matches,
2052-
matchesToLoad,
20532051
loaderResults,
20542052
pendingActionResult,
20552053
revalidatingFetchers,
@@ -2139,7 +2137,8 @@ export function createRouter(init: RouterInit): Router {
21392137
);
21402138
}
21412139

2142-
if (fetchControllers.has(key)) abortFetcher(key);
2140+
abortFetcher(key);
2141+
21432142
let flushSync = (opts && opts.flushSync) === true;
21442143

21452144
let routesToUse = inFlightDataRoutes || dataRoutes;
@@ -2412,9 +2411,7 @@ export function createRouter(init: RouterInit): Router {
24122411
existingFetcher ? existingFetcher.data : undefined
24132412
);
24142413
state.fetchers.set(staleKey, revalidatingFetcher);
2415-
if (fetchControllers.has(staleKey)) {
2416-
abortFetcher(staleKey);
2417-
}
2414+
abortFetcher(staleKey);
24182415
if (rf.controller) {
24192416
fetchControllers.set(staleKey, rf.controller);
24202417
}
@@ -2480,7 +2477,6 @@ export function createRouter(init: RouterInit): Router {
24802477
let { loaderData, errors } = processLoaderData(
24812478
state,
24822479
matches,
2483-
matchesToLoad,
24842480
loaderResults,
24852481
undefined,
24862482
revalidatingFetchers,
@@ -2934,8 +2930,8 @@ export function createRouter(init: RouterInit): Router {
29342930
fetchLoadMatches.forEach((_, key) => {
29352931
if (fetchControllers.has(key)) {
29362932
cancelledFetcherLoads.add(key);
2937-
abortFetcher(key);
29382933
}
2934+
abortFetcher(key);
29392935
});
29402936
}
29412937

@@ -3018,9 +3014,10 @@ export function createRouter(init: RouterInit): Router {
30183014

30193015
function abortFetcher(key: string) {
30203016
let controller = fetchControllers.get(key);
3021-
invariant(controller, `Expected fetch controller: ${key}`);
3022-
controller.abort();
3023-
fetchControllers.delete(key);
3017+
if (controller) {
3018+
controller.abort();
3019+
fetchControllers.delete(key);
3020+
}
30243021
}
30253022

30263023
function markFetchersDone(keys: string[]) {
@@ -5354,7 +5351,6 @@ function processRouteLoaderData(
53545351
function processLoaderData(
53555352
state: RouterState,
53565353
matches: AgnosticDataRouteMatch[],
5357-
matchesToLoad: AgnosticDataRouteMatch[],
53585354
results: Record<string, DataResult>,
53595355
pendingActionResult: PendingActionResult | undefined,
53605356
revalidatingFetchers: RevalidatingFetcher[],

0 commit comments

Comments
 (0)