promise.retry
TypeScript icon, indicating that this package has built-in type declarations

2.1.0 • Public • Published

promise.retry

add (timeout and fail) retry for async functions

Build Status Coverage Status npm version npm downloads npm license

Install

$ pnpm add promise.retry

Note

this package require async/await environment.

Alternatives

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 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)

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, see fn2 / 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 as pretry options
  • timeout : number same as pretry options
  • message : string the error message
  • errors : [err1, err2, ...] the errors

See Also

Changelog

CHANGELOG.md

License

the MIT License http://magicdawn.mit-license.org

Versions

Current Tags

VersionDownloads (Last 7 Days)Tag
2.1.043latest

Version History

VersionDownloads (Last 7 Days)Published
2.1.043
2.0.55
2.0.41
2.0.30
2.0.21
2.0.10
2.0.00
1.2.08
1.1.10
1.1.00
1.0.00
0.3.10
0.3.00
0.2.00
0.1.00
0.0.20
0.0.11

Package Sidebar

Install

npm i promise.retry

Weekly Downloads

59

Version

2.1.0

License

MIT

Unpacked Size

13.2 kB

Total Files

6

Last publish

Collaborators

  • magicdawn