Skip to content

d8corp/nano-task

Repository files navigation

Overview

queue-nano-task is a lightweight JavaScript library designed to manage and schedule nanotasks efficiently. Inspired by queueMicrotask, it provides a controlled, internal flow of tasks that allows fine-grained task execution management.

stars watchers

Installation

Using npm:

npm i queue-nano-task

Using yarn:

yarn add queue-nano-task

Getting Started

The main queueNanotask function accepts one required parameter and two optional:

  • The first parameter is a task represented by a function that will be executed within the task queue.
  • The second (optional) parameter sets the task priority, with a default value of 0.
  • The third (optional) parameter determines the queue order, where LIFO is used if true; otherwise, FIFO by default.

If queueNanotask is executed outside the context of another queueNanotask call, the code is executed immediately during the call.

import { queueNanotask } from 'queue-nano-task'

const log: any[] = []

queueNanotask(() => log.push(42))
// log: [42]

Task Priority

Control the execution priority of Nano-Tasks with the second and the third optional argument.

  • The third argument, when true, switches the order of the queue from the default FIFO to LIFO.
  • Lower priority values are executed before higher priority values.
  • Tasks with the same priority are ordered based on FIFO or LIFO, depending on the third parameter.
import { queueNanotask, Task } from 'queue-nano-task'

const log: any[] = []

const logger = (value: any): Task => () => {
  log.push(value)
}

queueNanotask(() => {
  queueNanotask(logger('Mounted'), 2)
  queueNanotask(logger('Mounting'), 1)
  queueNanotask(logger('Rendering'), 0)
  queueNanotask(logger('WillMount'), 1, true)
})
// log: ['Rendering', 'WillMount', 'Mounting', 'Mounted']

In the example, 'Rendering' (priority 0) executes first, followed by 'WillMount' (priority 1, LIFO), then 'Mounting' (priority 1, FIFO), and finally 'Mounted' (priority 2).

Runs from the left to the right
[true, ..., false] > [true, ..., false] > ...
^ 0 ^ ^ 1 ^

Issues & Contributions

If you find bugs or want to suggest features, please open an issue on GitHub.

issues

About

No description, website, or topics provided.

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors