@teneff/with-retry
TypeScript icon, indicating that this package has built-in type declarations

1.1.3 • Public • Published

@teneff/with-retry

Retry async functions when error happens

NPM version Build Status Coverage Status GitHub issues GitHub stars

Options

Type: object

options.maxCalls

Type: number (default: 2)

Specifies the maximum amount of calls to the decorated function.

options.errors

Type: Error[] (default: [Error])

Specifies an array of errors for which the function should be retried. If the default option is used it will be retried for every error.

options.delay

Type: number | ({ call: number; errors: Error[] }) => number (default: 0)

Specifies amount of delay before each retry.

  • If a number is given after each Error the subsequent invocation will be delayed with a fixed amount.
  • If a function returning number is given it will invoke the function and delay the invocations by the result

Examples:

on request timeout using got

import got from 'got'
import withRetry from '@teneff/with-retry'

@withRetry({
    maxCalls: 5,
    errors: [got.TimeoutError],
})
export default function getFlakyServiceData() {
    return await got("https://example.com");
}

as a function

using got

import got from "got";
import withRetry from "@teneff/with-retry";

function getFlakyServiceData() {
  return await got("https://example.com");
}

export default withRetry({
  maxCalls: 5,
  errors: [got.TimeoutError],
})(getFlakyServiceData);

as an experimental decorator

import got from "got";
import withRetry from '@teneff/with-retry/decorator'

class Example
  @withRetry({
    maxCalls: 5,
    errors: [got.TimeoutError],
  })
  getFlakyServiceData() {
    return await got("https://example.com");
  }
}

v1.1.0

Adds support for unknown errors

import withRetry, { UnknownError } from "@teneff/with-retry";

function resolvesPromiseWithNonError() {
  return Promise.reject("a string");
}

await withRetry({
  errors: UnknownError,
})(resolvesPromiseWithNonError)();

v1.1.2

Fixes issue #6 preserving class context

class Example {
  private mockCallback = jest
    .fn()
    .mockRejectedValueOnce(new Error(`[${num}] mock error`))
    .mockResolvedValue(`[${num}] success`);

  @withRetry({
    maxCalls: 4,
  })
  getData2(): Promise<string> {
    return this.mockCallback("arg1", "arg2");
  }
}

Readme

Keywords

Package Sidebar

Install

npm i @teneff/with-retry

Weekly Downloads

125

Version

1.1.3

License

MIT

Unpacked Size

10 kB

Total Files

16

Last publish

Collaborators

  • teneff