1.0.6 • Published 4 years ago

batch-promises-with-delay v1.0.6

Weekly downloads
3
License
MIT
Repository
github
Last release
4 years ago

Batch Promises with Delay

This module is for batching promises that need delays between batches. It also allows users to retry promises that have failed. One situation this can be useful is when dealing with unreliable api calls that have rate limits.

Installation

npm install --save batch-promises-with-delay

or

yarn add batch-promises-with-delay

Simple Usage

// simple-example.js

const batchPromisesWithDelay = require('batch-promises-with-delay')

const promises = [
  {
    func: async (a, b) => {
      /* some api call */
      /* some database save call */
    },
    args: ['A', 'B'],
  },
  {
    func: async (c, d) => {
      /* some api call */
      /* some database save call */
    },
    args: ['C', 'D'],
  },
]

const options = {
  batchSize: 3,
  delayBetweenBatches: 1000, // in ms
}

batchPromisesWithDelay(promises, options)

Options

PropertyDescriptionTypeDefault Value
batchSizeSize of the batchnumber1
delayBetweenBatchesTime delay between batches in msnumber1
retryFiltersFilters to enable retry (see below)array of functions[]
greedyRetryRetry all promises, even if they failbooleanfalse
ignoreFailuresQuietly ignore all promise failuresbooleanfalse
onSuccessLifecycle hook (see below)f(args, result)() => {}
onFailureLifecycle hook (see below)f(args, err)null
onRetryLifecycle hook (see below)f(args)() => {}
onBatchStartLifecycle hook (see below)f()() => {}
onBatchEndLifecycle hook (see below)f()() => {}

Retrying Promises

In certain circumstances, there will be a need to retry promises when they throw a fail condition. Such promises are thrown to the back of the queue to be retried.

The way we decide if a fail condition should be retried is by using an array of filters. As long as one filter in an array passes, the promise is retried.

const retryFilters = [
  (err) => {
    err.message == 'retry me'
  },
  (err) => {
    err.statusCode == 418
  },
]

Lifecycle hooks

These are functions that are called at certain points in the lifecycle of each batch or promise.

The following arguments are worth mention:

  • args refers to the arguments that are passed as part of the "promises". The reason this is here is partly to give context to the result, and partly to identify which promises are failing by providing some data for logging.
  • result is the result that is gotten from the promise that has been executed.
  • err is the error object.
1.0.6

4 years ago

1.0.5

4 years ago

1.0.4

4 years ago

1.0.3

4 years ago

1.0.2

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago