promise.retry
v2.1.0
Published
add (timeout and fail) retry for async functions
Readme
promise.retry
add (timeout and fail) retry for async functions
Install
$ pnpm add promise.retryNote
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)fnthe original async functionoptionstimes:numbertry how many timestimeout:numberthe timeout for each attempt, in msdelay:numberor(i: number) => number, retry delay, in ms.onerror:(err: any, i: number) => anyadd 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 specifiedpretryWithCleanUp
- only difference is it will trim last
AbortSignal?arg, seefn2/fn3signature
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:numbersame aspretryoptionstimeout:numbersame aspretryoptionsmessage:stringthe error messageerrors:[err1, err2, ...]the errors
See Also
Changelog
License
the MIT License http://magicdawn.mit-license.org
