add (timeout and fail) retry for async functions
$ pnpm add promise.retry
this package require async/await environment.
-
p-retry,
pretry(asyncAction, options)
-
radash.retry
retry(options, asyncAction)
asyncAction
means a function with no parameters, give async funtion getUser(uid: string): Promise<User>
, u need to wrap parameter in a asyncAction: const user = await pretry(() => getUser('zhangsan'), options)
this package take a different approach: const tryGetUser = pretry(getUser, options)
, this is a async wrapper has same signature as getUser
import { pretry, pretryWithCleanUp, TimeoutError, RetryError } from 'promise.retry'
const fnWithRetry = pretry(fn, options)
-
fn
the original async function -
options
-
times
:number
try how many times -
timeout
:number
the timeout for each attempt, in ms -
delay
:number
or(i: number) => number
, retry delay, in ms. -
onerror
:(err: any, i: number) => any
add extra action on an attempt error
-
i is always 0
based. (starts from 0
)
if options.timeout
is provided, ptimeout will provide a extra runtime argument signal?: AbortSignal
use like below, see more at https://github.com/magicdawn/promise.timeout#singal
async fn(num: number, signal?: AbortSignal) {
signal.addEventListener('abort', () => {
// custom clean up
})
}
const fn2 = pretry(fn, { timeout: 1000 }) // (num: number, signal?: AbortSignal) => Promise<void>
await fn2() // <- no `signal` arg here, the `signal` in fn is provided by ptimeout at runtime, only when options.timeout specified
const fn3 = pretryWithCleanUp(fn, { timeout: 1000 }) // (num: number) => Promise<void>
await fn3() // <- no `signal` arg here, the `signal` in fn is provided by ptimeout at runtime, only when options.timeout specified
- only difference is it will trim last
AbortSignal?
arg, seefn2
/fn3
signature
re-export from promise.timeout
, see https://github.com/magicdawn/promise.timeout#api
if all attempts failed, p = fnWithRetry()
, p
will be reject with a RetryError instance.
props
-
times
:number
same aspretry
options -
timeout
:number
same aspretry
options -
message
:string
the error message -
errors
:[err1, err2, ...]
the errors
the MIT License http://magicdawn.mit-license.org