11import { focusManager } from './focusManager'
22import { onlineManager } from './onlineManager'
3- import { functionalUpdate , sleep } from './utils'
3+ import { sleep } from './utils'
44
55// TYPES
66
@@ -12,7 +12,7 @@ interface RetryerConfig<TData = unknown, TError = unknown> {
1212 onPause ?: ( ) => void
1313 onContinue ?: ( ) => void
1414 retry ?: RetryValue < TError >
15- retryDelay ?: RetryDelayValue
15+ retryDelay ?: RetryDelayValue < TError >
1616}
1717
1818export type RetryValue < TError > = boolean | number | ShouldRetryFunction < TError >
@@ -22,9 +22,12 @@ type ShouldRetryFunction<TError = unknown> = (
2222 error : TError
2323) => boolean
2424
25- export type RetryDelayValue = number | RetryDelayFunction
25+ export type RetryDelayValue < TError > = number | RetryDelayFunction < TError >
2626
27- type RetryDelayFunction = ( failureCount : number ) => number
27+ type RetryDelayFunction < TError = unknown > = (
28+ failureCount : number ,
29+ error : TError
30+ ) => number
2831
2932function defaultRetryDelay ( failureCount : number ) {
3033 return Math . min ( 1000 * 2 ** failureCount , 30000 )
@@ -163,7 +166,10 @@ export class Retryer<TData = unknown, TError = unknown> {
163166 // Do we need to retry the request?
164167 const retry = config . retry ?? 3
165168 const retryDelay = config . retryDelay ?? defaultRetryDelay
166- const delay = functionalUpdate ( retryDelay , this . failureCount ) || 0
169+ const delay =
170+ typeof retryDelay === 'function'
171+ ? retryDelay ( this . failureCount , error )
172+ : retryDelay
167173 const shouldRetry =
168174 retry === true ||
169175 ( typeof retry === 'number' && this . failureCount < retry ) ||
0 commit comments