Skip to content

abir-taheer/async-rate-limit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

async-rate-limit

Queue setup for limiting things like api calls and other asynchronous tasks like api calls that may take unpredictable amounts of time. Works with TypeScript.

Usage:

Importing

ES6 imports

import RateLimit from "async-rate-limit";

CommonJS:

const RateLimit = require("async-rate-limit");

Using In practice

// Pretending to have an API with a limit of 10 requests per second
const limiter = new RateLimit({limit: 10, timespan: 1000});

const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));

for(let x = 0; x < 100; x++){    
    limiter.perform(async () => {
        const requestTime = Math.floor(Math.random() * 2000);
        await sleep(requestTime);
        return requestTime;
    }).then(time => {
    	console.log(`Completed Request ${x} in ${time}ms`);
    });
}

Documentation

Creating an instance of RateLimit:

const limiter = new RateLimit(options);

Options

Name: Description:
limit The maximum number of actions that can be performed in a given timespan. Also the max number of concurrent events. Default: 5
timespan How long to wait before freeing up an action slot. Given in milliseconds. Default: 1000.

Methods

perform(action)

Takes in a function and returns a Promise.

The promise resolves to the value that is returned by calling the provided function. If the provided function returns a promise then it will wait for the promise to resolve first.

const return5 = async () => 5;

limiter
    .perform(return5)
    .then(result => {
        console.log("Expected: 5; Result: " + result);
    });

About

A library to help limit rate-limit asynchronous tasks like api calls.

Resources

Stars

Watchers

Forks

Releases

No releases published