https://github.com/4i8/queuex
Queuex simplifies managing tasks in sequence, making it easy to handle various operations one after another. Whether you're processing data or handling requests, Queuex ensures tasks are organized and executed efficiently, streamlining your workflow.
https://github.com/4i8/queuex
asynchronous-task-management commonjs ecmascript-modules sequential-processing task-automation task-queue task-scheduling workflow-management
Last synced: 10 months ago
JSON representation
Queuex simplifies managing tasks in sequence, making it easy to handle various operations one after another. Whether you're processing data or handling requests, Queuex ensures tasks are organized and executed efficiently, streamlining your workflow.
- Host: GitHub
- URL: https://github.com/4i8/queuex
- Owner: 4i8
- License: apache-2.0
- Created: 2024-06-15T20:54:59.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2024-06-15T20:55:30.000Z (over 1 year ago)
- Last Synced: 2025-05-09T18:05:01.950Z (10 months ago)
- Topics: asynchronous-task-management, commonjs, ecmascript-modules, sequential-processing, task-automation, task-queue, task-scheduling, workflow-management
- Language: TypeScript
- Homepage:
- Size: 7.81 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# **queuex**
**Queuex simplifies managing tasks in sequence, making it easy to handle various operations one after another. Whether you're processing data or handling requests, Queuex ensures tasks are organized and executed efficiently, streamlining your workflow.**
## Table of Contents
- [Compatibility](#compatibility)
- [Installation](#installation)
- [Example](#example)
- [CommonJS](#commonjs)
- [ES6](#es6)
- [What is the use of a namespace?](#what-is-the-use-of-a-namespace)
- [API](#api)
- [constructor(namespace, callback)](#constructornamespace-callback)
- [next()](#next)
- [push(task)](#pushtask)
- [concat(tasks)](#concattasks)
- [kill()](#kill)
- [License](#license)
## Compatibility
- **ECMAScript Modules (ESM)**
- **CommonJS (CJS)**
- **Bun**
# **Installation**
```sh-session
npm install queuex
yarn add queuex
```
# **Example**
## Note
Every push() or concat() will start your queuex if it is not already running so you don't have to worry about starting it manually
### CommonJS
this is just an example, you can use queuex for anything
```js
const Queuex = require("queuex");
const namespace = new Queuex("namespace", (value, next, index) => {
// Simulate an asynchronous task using setTimeout
console.log(`Task ${index + 1}: ${value.message}`);
setTimeout(() => {
console.log(`Completed task ${index + 1}`);
next(); // when you are done, call next() to move to the next task
}, value.delay);
});
let tasks = [
{
message: "This is task 1",
delay: 1000, // 1 second delay
},
{
message: "This is task 2",
delay: 500, // 0.5 second delay
},
{
message: "This is task 3",
delay: 2000, // 2 seconds delay
},
];
// concat is a method that adds an array of items to the namespace queue
namespace.concat(tasks);
// push is a method that adds a single item to the namespace queue
namespace.push({
message: "This is task 4",
delay: 1500, // 1.5 seconds delay
});
// every push or concat will start the namespace if it is not already running
```
### ES6
this is just an example, you can use queuex for anything
```js
import Queuex from "queuex";
const namespace = new Queuex("namespace", (value, next, index) => {
// Simulate an asynchronous task using setTimeout
console.log(`Task ${index + 1}: ${value.message}`);
setTimeout(() => {
console.log(`Completed task ${index + 1}`);
next(); // when you are done, call next() to move to the next task
}, value.delay);
});
let tasks = [
{
message: "This is task 1",
delay: 1000, // 1 second delay
},
{
message: "This is task 2",
delay: 500, // 0.5 second delay
},
{
message: "This is task 3",
delay: 2000, // 2 seconds delay
},
];
// concat is a method that adds an array of items to the namespace queue
namespace.concat(tasks);
// push is a method that adds a single item to the namespace queue
namespace.push({
message: "This is task 4",
delay: 1500, // 1.5 seconds delay
});
// every push or concat will start the namespace if it is not already running
```
### What is the use of a namespace?
To avoid throwing errors, do not use the same namespace more than once in the same process.
#### `test/index.js`
```js
const tools = new queuex("tools", async (value, next, index) => {
// do something...
console.log(value);
next(); //hello2
});
tools.push("hello");
```
#### `test/inside/tools.js`
**to index.js in your queuex instance named tools**
```js
const tools = new queuex("tools");
tools.push("hello2");
//or
tools.concat(["hello2", "hello3"]);
```
# API
queuex provides the following methods:
> ##### `constructor(namespace, callback)`
>
> Creates a new instance of the queuex class with the provided namespace and callback function.
- namespace (string) - The namespace for the Queuex sequence.
- callback (Function) - The callback function that takes a value, a next function, and an index as parameters.
> #### `next()`
>
> Moves the Queuex sequence to the next task and runs it.
> #### `push(task)`
>
> Adds a new task to the end of the Queuex sequence.
- task (any) - The task to add to the Queuex sequence.
> #### `concat(tasks)`
>
> Adds an array of tasks to the end of the Queuex sequence.
- tasks (Array) - The array of tasks to add to the Queuex sequence.
> #### `kill()`
>
> Stops the current Queuex sequence and prevents any remaining tasks from running.
# License
queuex is licensed under the [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0)