promise.retry
v2.1.0
Published
add (timeout and fail) retry for async functions
Downloads
630
Readme
promise.retry
add (timeout and fail) retry for async functions
Install
$ pnpm add promise.retry
Note
this package require async/await environment.
Alternatives
- 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
API
import { pretry, pretryWithCleanUp, TimeoutError, RetryError } from 'promise.retry'
pretry
const fnWithRetry = pretry(fn, options)
fn
the original async functionoptions
times
:number
try how many timestimeout
:number
the timeout for each attempt, in msdelay
: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
)
AbortSignal
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
pretryWithCleanUp
- only difference is it will trim last
AbortSignal?
arg, seefn2
/fn3
signature
TimeoutError
re-export from promise.timeout
, see https://github.com/magicdawn/promise.timeout#api
RetryError
if all attempts failed, p = fnWithRetry()
, p
will be reject with a RetryError instance.
props
times
:number
same aspretry
optionstimeout
:number
same aspretry
optionsmessage
:string
the error messageerrors
:[err1, err2, ...]
the errors
See Also
Changelog
License
the MIT License http://magicdawn.mit-license.org