@macarie/batch
TypeScript icon, indicating that this package has built-in type declarations

1.2.1 • Public • Published

@macarie/batch Release Version

Batch multiple function calls into one

Test Status Badge Codecov Code Coverage Result

Batches multiple function calls into one by creating a throttled function.

Useful for batching together multiple state changes, for example.

This module offers full TypeScript support.

Install

$ npm install @macarie/batch

Or if you prefer using Yarn:

$ yarn add @macarie/batch

Usage

import batch from "@macarie/batch"

const f = (parameters) => {
  parameters.forEach((parameter) => console.log(parameter))
}

const batchedF = batch(f, 50)

batchedF(1, "a")
batchedF(2, "b")
batchedF(3, "c")

// After ~50ms it will log:
// => [1, 'a']
// => [2, 'b']
// => [3, 'c']

API

batch(f, interval?, options?)

Creates a throttled function that only invokes f at most once per every interval milliseconds.

When the time comes, it invokes f with an array that contains the arguments of every function-call that did not run, grouped, as these are collected and batched.

f

Type: function
Required: true

The function that should receive batches of arguments.

interval

Type: number
Required: false
Default: 0

Timespan for limit in milliseconds.

options

Type: object
Required: false

limit

Type: number
Required: false
Default: Infinity

Maximum number of function calls within an interval.

batchedFunction.flush()

Flush the current batch by running the function immediately, without waiting for limit or interval.

batchedFunction.clear()

Discard the current batch. The function won't run.

More Examples

This module offers full TypeScript support so that the batched function has type hints.

import batch from "@macarie/batch"

type ParametersType = [number, string]

const f = (parameters: ParametersType[]) => {
  parameters.forEach((parameter) => console.log(parameter))
}

const batchedF = batch(f, 50)

batchedF(1, "a")
batchedF(2, "b")

// The type checker will complain about this
//  as [string, number] is different from [number, string]
batchedF("c", 3)

Using the limit option.

import batch from "@macarie/batch"

const f = (parameters) => {
  parameters.forEach((parameter) => console.log(parameter))
}

const batchedF = batch(f, 50, { limit: 1 })

batchedF(1, "a")
batchedF(2, "b")

// It will immediately log:
// => [1, 'a']
// => [2, 'b']

batchedF(3, "c")

// After ~50ms it will log:
// => [3, 'c']

Using flush and clear.

import batch from "@macarie/batch"

const f = (parameters) => {
  parameters.forEach((parameter) => console.log(parameter))
}

const batchedF = batch(f, 50)

batchedF(1, "a")
batchedF(2, "b")

batchedF.flush()

// It will immediately log:
// => [1, 'a']
// => [2, 'b']

batchedF(3, "c")

batchedF.clear()

// Even after ~50ms it won't log anything

License

MIT © Raul Macarie.

Package Sidebar

Install

npm i @macarie/batch

Weekly Downloads

6

Version

1.2.1

License

MIT

Unpacked Size

10.9 kB

Total Files

6

Last publish

Collaborators

  • macarie