# p-queue **Repository Path**: mirrors_floatdrop/p-queue ## Basic Information - **Project Name**: p-queue - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-09-24 - **Last Updated**: 2026-05-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # p-queue [![Build Status](https://travis-ci.org/sindresorhus/p-queue.svg?branch=master)](https://travis-ci.org/sindresorhus/p-queue) > Promise queue with concurrency control Useful for rate-limiting async operations. For example, when interacting with a REST API or when doing CPU/memory intensive tasks. ## Install ``` $ npm install --save p-queue ``` ## Usage Here we run only one promise at the time. For example, set `concurrency` to 4 to run four promises at the time. ```js const PQueue = require('p-queue'); const got = require('got'); const queue = new PQueue({concurrency: 1}); queue.add(() => got('sindresorhus.com')).then(() => { console.log('Done: sindresorhus.com'); }); queue.add(() => got('ava.li')).then(() => { console.log('Done: ava.li'); }); getUnicornTask().then(task => queue.add(task)).then(() => { console.log('Done: Unicorn task'); }); ``` ## API ### PQueue([options]) Returns a new `queue` instance. #### options Type: `Object` ##### concurrency Type: `number`
Default: `Infinity`
Minimum: `1` Concurrency limit. ### queue `PQueue` instance. #### .add(fn) Returns the promise returned by calling `fn`. ##### fn Type: `Function` Promise-returning/async function. #### .onEmpty() Returns a promise that settles when the queue becomes empty. Can be called multiple times. Useful if you for example add additional items at a later time. #### .size Size of the queue. #### .pending Number of pending promises. ## Advanced example A more advanced example to help you understand the flow. ```js const delay = require('delay'); const PQueue = require('p-queue'); const queue = new PQueue({concurrency: 1}); delay(200).then(() => { console.log(`8. Pending promises: ${queue.pending}`); //=> '8. Pending promises: 0' queue.add(() => Promise.resolve('πŸ™')).then(console.log.bind(null, '11. Resolved')); console.log('9. Added πŸ™'); console.log(`10. Pending promises: ${queue.pending}`); //=> '10. Pending promises: 1' queue.onEmpty().then(() => { console.log('12. Queue is empty again'); }); }); queue.add(() => Promise.resolve('πŸ¦„')).then(console.log.bind(null, '5. Resolved')); console.log('1. Added πŸ¦„'); queue.add(() => Promise.resolve('🐴')).then(console.log.bind(null, '6. Resolved')); console.log('2. Added 🐴'); queue.onEmpty().then(() => { console.log('7. Queue is empty'); }); console.log(`3. Queue size: ${queue.size}`); //=> '3. Queue size: 1` console.log(`4. Pending promises: ${queue.pending}`); //=> '4. Pending promises: 1' ``` ``` $ node example.js 1. Added πŸ¦„ 2. Added 🐴 3. Queue size: 1 4. Pending promises: 1 5. Resolved πŸ¦„ 6. Resolved 🐴 7. Queue is empty 8. Pending promises: 0 9. Added πŸ™ 10. Pending promises: 1 11. Resolved πŸ™ 12. Queue is empty again ``` ## Related - [p-limit](https://github.com/sindresorhus/p-limit) - Run multiple promise-returning & async functions with limited concurrency - [p-throttle](https://github.com/sindresorhus/p-throttle) - Throttle promise-returning & async functions - [p-debounce](https://github.com/sindresorhus/p-debounce) - Debounce promise-returning & async functions - [p-all](https://github.com/sindresorhus/p-all) - Run promise-returning & async functions concurrently with optional limited concurrency - [More…](https://github.com/sindresorhus/promise-fun) ## License MIT Β© [Sindre Sorhus](https://sindresorhus.com)