throttles

WebJar for throttles

License

License

MIT
GroupId

GroupId

org.webjars.npm
ArtifactId

ArtifactId

throttles
Last Version

Last Version

1.0.0
Release Date

Release Date

Type

Type

jar
Description

Description

throttles
WebJar for throttles
Project URL

Project URL

https://www.webjars.org
Source Code Management

Source Code Management

https://github.com/lukeed/throttles

Download throttles

How to add to project

<!-- https://jarcasting.com/artifacts/org.webjars.npm/throttles/ -->
<dependency>
    <groupId>org.webjars.npm</groupId>
    <artifactId>throttles</artifactId>
    <version>1.0.0</version>
</dependency>
// https://jarcasting.com/artifacts/org.webjars.npm/throttles/
implementation 'org.webjars.npm:throttles:1.0.0'
// https://jarcasting.com/artifacts/org.webjars.npm/throttles/
implementation ("org.webjars.npm:throttles:1.0.0")
'org.webjars.npm:throttles:jar:1.0.0'
<dependency org="org.webjars.npm" name="throttles" rev="1.0.0">
  <artifact name="throttles" type="jar" />
</dependency>
@Grapes(
@Grab(group='org.webjars.npm', module='throttles', version='1.0.0')
)
libraryDependencies += "org.webjars.npm" % "throttles" % "1.0.0"
[org.webjars.npm/throttles "1.0.0"]

Dependencies

There are no dependencies for this project. It is a standalone project that does not depend on any other jars.

Project Modules

There are no modules declared in this project.

throttles build status codecov

A tiny (139B to 204B) utility to regulate the execution rate of your functions

Install

$ npm install --save throttles

Modes

There are two "versions" of throttles, each of which different purpose:

"single"

Size (gzip): 139 bytes
Availability: UMD, CommonJS, ES Module

This is the primary/default mode, meant for managing single queues.

"priority"

Size (gzip): 204 bytes
Availability: UMD, ES Module

This is the opt-in mode, meant for managing a low priority and a high priority queue system.
Items within the "high priority" queue are handled before the low/general queue. The limit is still enforced.

Usage

Selecting a Mode

// import via npm module
import throttles from 'throttles';
import throttles from 'throttles/priority';

// import via unpkg
import throttles from 'https://unpkg.com/throttles/index.mjs';
import throttles from 'https://unpkg.com/throttles/priority/index.mjs';

Example Usage

import throttles from 'throttles';

const API = 'https://pokeapi.co/api/v2/pokemon';
const getPokemon = id => fetch(`${API}/${id}`).then(r => r.json());

// Limit concurrency to 3
const [toAdd, isDone] = throttles(3);

// What we'll fetch
const pokemon = ['bulbasaur', 'ivysaur', 'venusaur', 'charmander', 'charmeleon', 'charizard', ...];

// Loop list, enqueuing each Pokemon
// ~> Always keeps 3 requests active at a time
// ~> When complete, marks itself complete via `isDone()`
pokemon.forEach(name => {
	toAdd(() => {
		getPokemon(name).then(isDone);
	});
});

// Or, use `Array.map` to wrap our `getPokemon` function
// ~> This still fetches Pokemon 3 at once
pokemon.map(x => () => getPokemon(x).then(isDone)).forEach(toAdd);

API

throttles(limit)

Returns: Array

Returns a tuple of [toAdd, isDone] actions.

limit

Type: Number
Default: 1

The throttle's concurrency limit. By default, runs your functions one at a time.

toAdd(fn[, isHigh])

Type: Function
Returns: void

Add a function to the throttle's queue.

Important: In "priority" mode, identical functions are ignored.

fn

Type: Function
The function to add to the queue.

isHigh

Type: Boolean
Default: false
If the fn should be added to the "high priority" queue.

Important: Only available in "priority" mode!

isDone

Type: Function
Returns: void

Signifies that a function has been completed.

Important: Failure to call this will prevent throttles from continuing to the next item!

License

MIT © Luke Edwards

Versions

Version
1.0.0