{"id":45605,"library":"noqueue","title":"noqueue","description":"noqueue is an asynchronous queue and loop utility library for Node.js (v5.0.15, last updated in 2021). It provides an infinity loop with built-in queue management, parallel execution, and utility functions like First (race), Fill (allSettled), TillSuccess (retry), and AwaitSleep. Written in TypeScript with ESM support. Differentiates from simple setTimeout/setInterval by offering structured event-driven patterns with failover and synchronous/asynchronous job control. Suitable for task scheduling, retries, and concurrent processing.","status":"maintenance","version":"5.0.15","language":"javascript","source_language":"en","source_url":"https://github.com/chiro-hiro/noqueue","tags":["javascript","queue","synchronous","asynchronous","failover","typescript"],"install":[{"cmd":"npm install noqueue","lang":"bash","label":"npm"},{"cmd":"yarn add noqueue","lang":"bash","label":"yarn"},{"cmd":"pnpm add noqueue","lang":"bash","label":"pnpm"}],"dependencies":[],"imports":[{"note":"Default export is not available; named import from package root.","wrong":"import { QueueLoop } from 'noqueue/QueueLoop'","symbol":"QueueLoop","correct":"import { QueueLoop } from 'noqueue'"},{"note":"Works with CJS require, but ESM import is recommended for TypeScript.","wrong":"const ParallelLoop = require('noqueue').ParallelLoop","symbol":"ParallelLoop","correct":"import { ParallelLoop } from 'noqueue'"},{"note":"First is a named utility function, not default export.","wrong":"import First from 'noqueue'","symbol":"First","correct":"import { First } from 'noqueue'"},{"note":"All exports are from the main package, no subpaths.","wrong":"import { Fill } from 'noqueue/Utilities'","symbol":"Fill","correct":"import { Fill } from 'noqueue'"},{"note":"Named export; ensures a job retries until success.","wrong":"","symbol":"TillSuccess","correct":"import { TillSuccess } from 'noqueue'"}],"quickstart":{"code":"import { QueueLoop, AwaitSleep, TillSuccess } from 'noqueue';\n\nconst queue = new QueueLoop();\nqueue.enqueue(async () => {\n  console.log('Job 1');\n  await AwaitSleep(100);\n});\nqueue.enqueue(async () => {\n  console.log('Job 2');\n  await AwaitSleep(100);\n});\n\n// Start processing\nqueue.start();\n\n// Stop after 1 second\nsetTimeout(() => queue.stop(), 1000);\n\n// Retry a job till success\nconst fetchData = async () => {\n  const resp = await fetch('https://api.example.com/data', { signal: AbortSignal.timeout(2000) });\n  if (!resp.ok) throw new Error('Retry');\n  return resp.json();\n};\nconst result = await TillSuccess(fetchData, { delay: 500, maxRetry: 5 });\nconsole.log('Fetched:', result);","lang":"typescript","description":"Demonstrates basic queue loop usage with AwaitSleep and retry with TillSuccess."},"warnings":[{"fix":"Use import syntax or ensure Node version supports ESM; if using CJS, test with require('noqueue').","message":"v5 removed CommonJS support? Check documentation; README indicates ESM focus but CJS require works.","severity":"breaking","affected_versions":">=5.0.0"},{"fix":"Use events or callbacks to know when queue is empty.","message":"QueueLoop.start() does not return a promise; jobs are processed asynchronously.","severity":"gotcha","affected_versions":"*"},{"fix":"Provide explicit delay and maxRetry options to control retry behavior.","message":"TillSuccess uses exponential backoff? Default delay behavior is not documented; test with custom delay.","severity":"gotcha","affected_versions":"*"},{"fix":"Ensure all passed promises settle or use AbortController/timeout.","message":"First utility may leave pending promises if some jobs never resolve; no cancellation support.","severity":"gotcha","affected_versions":"*"},{"fix":"Use new Promise(resolve => setTimeout(resolve, ms)) directly if preferred.","message":"AwaitSleep is just a promise-based setTimeout; no special behavior.","severity":"deprecated","affected_versions":"*"}],"env_vars":null,"search_vec":"'2021':17 'allsettl':38 'asynchron':5,77 'awaitsleep':42 'built':25 'built-in':24 'concurr':72 'control':65 'differenti':49 'driven':58 'esm':47 'event':57 'event-driven':56 'execut':30 'failov':61,78 'fill':37 'first':35 'function':33 'infin':21 'javascript':74 'job':64 'last':14 'librari':10 'like':34 'loop':8,22 'manag':28 'node.js':12 'noqueu':1,2 'offer':54 'parallel':29 'pattern':59 'process':73 'provid':19 'queue':6,27,75 'race':36 'retri':40,70 'schedul':69 'settimeout/setinterval':52 'simpl':51 'structur':55 'suitabl':66 'support':48 'synchron':76 'synchronous/asynchronous':63 'task':68 'tillsuccess':39 'typescript':45,79 'updat':15 'util':9,32 'v5.0.15':13 'written':43","created_at":"2026-06-07T12:55:49.624905+00:00","updated_at":"2026-06-07T12:55:49.624905+00:00","problems":[{"fix":"Run `npm install noqueue` and ensure import path is 'noqueue' (not 'noqueue/src').","cause":"Package not installed or import path incorrect.","error":"Error: Cannot find module 'noqueue'"},{"fix":"Use named import: `import { QueueLoop } from 'noqueue'` and instantiate with `new QueueLoop()`.","cause":"Importing wrong symbol or using default export incorrectly.","error":"TypeError: queue.enqueue is not a function"},{"fix":"Add 'type':'module' to package.json or use require: `const { QueueLoop } = require('noqueue')`.","cause":"ESM syntax in a CJS environment or missing 'type':'module' in package.json.","error":"SyntaxError: Cannot use import statement outside a module"}],"ecosystem":"npm","meta_description":null,"install_score":null,"quickstart_score":null,"quickstart_tag":null,"pypi_latest":null,"cli_name":null,"cli_version":null,"type":"library","homepage":"https://github.com/chiro-hiro/noqueue#readme","github":"https://github.com/chiro-hiro/noqueue","docs":null,"changelog":null,"pypi":null,"npm":"noqueue","openapi_spec":null,"status_page":null,"smithery":null,"categories":["devops"],"base_url":null,"auth_type":null,"provenance":{"verified_status":null,"verified_at":null,"last_verified":"2026-06-07","next_check":"2026-09-05","install_tag":null}}