-
Notifications
You must be signed in to change notification settings - Fork 0
Retry With Delay
Ivan Kasenkov edited this page Jul 27, 2021
·
5 revisions
ksRetryWithDelay.ts
type RetryWithDelayCfg =
| {
stopWhen?: (attempt: number) => boolean;
timeScale?: (attempt: number) => number;
}
| undefined;
export const ksRetryWithDelay = <E, A>({
stopWhen = (n: number) => n > 3,
timeScale = (n: number) => n * 1_000,
}: RetryWithDelayCfg = {}) => {
let attempt = 0;
return ksRetryWhen<E, A>(errors =>
errors.pipe(
ksSwitch(error => {
return stopWhen(++attempt)
? // stop retry
ksOf(some(error))
: // retry with delay
ksTimeout(timeScale(attempt)).pipe(ksMapTo(none));
}),
),
);
};