/promise.retry

add (timeout and fail) retry for async functions

Primary LanguageTypeScript

promise.retry

add (timeout and fail) retry for async functions

Build Status Coverage Status npm version npm downloads npm license

Install

$ npm i -S 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, 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)

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

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(signal?: AbortSignal) {
	signal?.addEventListener('abort', () => {
		// custom clean up
	})
}

const fn2 = pretry(fn, { timeout: 1000 })
await fn2() // <- no `signal` arg here, the `signal` in fn is provided by ptimeout at runtime, only when options.timeout specified

See Also

Changelog

CHANGELOG.md

License

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