@macarie/batch
v1.2.1
Published
Batch multiple function-calls into one
Downloads
4
Maintainers
Readme
@macarie/batch
Batch multiple function calls into one
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.