You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Task metadata � attach arbitrary data to tasks for tracing/logging
Zero dependencies � pure TypeScript, no runtime deps
Installation
npm install && npm run build
Quick Start
import{TaskQueue}from'task-queue';constqueue=newTaskQueue<string>({concurrency: 3,defaultTimeout: 5000,events: {taskComplete: (info)=>console.log(`Done: ${info.id}`),drain: ()=>console.log('All tasks finished'),},});// Add tasks with prioritiesqueue.add(async()=>fetchUser(1),{id: 'user-1',priority: 1});queue.add(async()=>fetchUser(2),{id: 'user-2',priority: 5});queue.add(async()=>fetchUser(3),{id: 'user-3',priority: 1});// Wait for everything to completeawaitqueue.drain();
Usage
Basic Task Execution
constqueue=newTaskQueue<number>({concurrency: 2});constresult=awaitqueue.add(async(signal)=>{// signal is an AbortSignal for cooperative cancellationconstdata=awaitfetch('/api/data',{ signal });returndata.status;},{id: 'fetch-data'});console.log(result.status);// 'completed'console.log(result.result);// 200
// Per-task timeoutconstinfo=awaitqueue.add(longRunningTask,{timeout: 3000});if(info.status==='timeout'){console.log('Task timed out:',info.error?.message);}// Global default timeoutconstqueue=newTaskQueue({defaultTimeout: 5000});
Pause and Resume
queue.pause();// Tasks already running will finish, but no new tasks startconsole.log(queue.isPaused);// truequeue.resume();// Queued tasks begin processing again