diff --git a/src/index/use-swr.ts b/src/index/use-swr.ts index 21c42a9c2..68301c604 100644 --- a/src/index/use-swr.ts +++ b/src/index/use-swr.ts @@ -89,6 +89,25 @@ type DefinitelyTruthy = false extends T ? never : T +function triggerRevalidators( + key: string, + revalidators: ((type: RevalidateEvent, opts?: { retryCount?: number; dedupe?: boolean }) => void)[] | undefined, + type: RevalidateEvent, + opts?: { retryCount?: number; dedupe?: boolean } +) { + if (!Array.isArray(revalidators)) return + + for (const revalidate of revalidators) { + try { + revalidate(type, opts) + } catch (err) { + if (process.env.NODE_ENV !== 'production') { + console.error(`SWR: Error triggering revalidator for key "${key}"`, err) + } + } + } +} + export const useSWRHandler = ( _key: Key, fetcher: Fetcher | null, @@ -521,12 +540,12 @@ export const useSWRHandler = ( currentConfig, _opts => { const revalidators = EVENT_REVALIDATORS[key] - if (revalidators && revalidators[0]) { - revalidators[0]( - revalidateEvents.ERROR_REVALIDATE_EVENT, - _opts - ) - } + triggerRevalidators( + key, + revalidators, + revalidateEvents.ERROR_REVALIDATE_EVENT, + _opts + ) }, { retryCount: (opts.retryCount || 0) + 1,