1.2.1 • Published 3 years ago

@macarie/batch v1.2.1

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

@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.