Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/Tanuel/async-queue
Promise based asynchronous job queue for TypeScript
https://github.com/Tanuel/async-queue
Last synced: 10 days ago
JSON representation
Promise based asynchronous job queue for TypeScript
- Host: GitHub
- URL: https://github.com/Tanuel/async-queue
- Owner: Tanuel
- Created: 2020-05-06T08:32:11.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2023-12-15T05:31:15.000Z (11 months ago)
- Last Synced: 2024-10-31T17:32:16.833Z (13 days ago)
- Language: TypeScript
- Size: 975 KB
- Stars: 16
- Watchers: 1
- Forks: 3
- Open Issues: 13
-
Metadata Files:
- Readme: Readme.md
Awesome Lists containing this project
README
[![Powered by Tanuel](https://img.shields.io/badge/Powered%20by-Tanuel-b22.svg)](https://github.com/Tanuel)
[![Documentation](https://img.shields.io/badge/-Documentation-blueviolet.svg)](https://github.com/Tanuel/async-queue#readme)
[![npm](https://img.shields.io/npm/v/@tanuel/async-queue.svg?logo=npm)](https://www.npmjs.com/package/@tanuel/async-queue)
[![npm](https://img.shields.io/npm/dt/@tanuel/async-queue.svg?logo=npm)](https://www.npmjs.com/package/@tanuel/async-queue)# @tanuel/async-queue
A zero dependency Promise based job queue with limited concurrency, written in TypeScript.
## Installing
yarn add @tanuel/async-queue
# or
npm install @tanuel/async-queue --save## Usage
```javascript
import { AsyncQueue } from "@tanuel/async-queue";(async () => {
const queue = new AsyncQueue();
queue.on("done", () => {
console.log("Queue is finished");
});
const fn = () => {
new Promise((resolve) => setTimeout(resolve.bind(null, "resolved"), 100));
};
const result = await queue.push(fn);
console.log("Job has been resolved with result", result);
})();
```This could be used to limit concurrency of network requests, e.g. if you want to load a lot of api requests
```javascript
import { AsyncQueue } from "@tanuel/async-queue";const urls = [
// an array of a lot of urls
];(async () => {
const queue = new AsyncQueue({ limit: 50 });
for (const u of urls) {
// queue in all the urls
queue
.push(() => jobWithNetworkIO(u))
.then((result) => {
// add even more jobs to the queue based on previous jobs
// e.g. fetch details after fetching a specific list
for (const item of result) {
queue.push(() => fetchDetails(item.url));
}
});
}
let resolved = 0;
let rejected = 0;
queue
.on("next", (c, l) => {
console.log("next call triggered");
})
.on("reject", (e) => {
console.error("A job has been rejected:", e);
rejected++;
})
.on("resolve", (result) => {
console.log("A job has been resolved", result);
resolved++;
})
.on("pending", (p) => {
// There are no more remaining jobs in the queue, but not all jobs have been finished
console.log("Waiting for " + p + " pending Jobs to finish");
})
.on("done", () => {
console.log("All jobs are done");
console.log(resolved, "Jobs resolved");
console.log(rejected, "Jobs rejected");
});
})();
```## TypeScript
This project was written entirely in TypeScript, so you can make use of the provided type definitions!
## Contributing
Feel free to open issues or pull requests on GitHub. Do not add unnecessary production dependencies, as we want
to keep the dependency tree as small as possibleAfter cloing the project, simply run `yarn install`, then `yarn build` to compile or `yarn test` to run tests