# promise-queue

> Promise-based queue

Latest version **2.2.5** (published 2018-01-28) · MIT license · 0 weekly downloads

## Install

```sh
npm install promise-queue
pnpm add promise-queue
yarn add promise-queue
bun add promise-queue
```

## Health

**Score 23/100 (F)** — status: abandoned.

Positive: has types package; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.2.5 |
| Published | 2018-01-28 |
| First published | 2013-12-16 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | separate (@types/promise-queue) |
| Module format | CommonJS |
| Node | >= 0.8.0 |
| Dependencies | 0 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 230 |
| Author | Mikhail Davydov |
| Maintainers | azproduction |

## Links

- npm: https://www.npmjs.com/package/promise-queue
- Repository: https://github.com/azproduction/promise-queue
- Homepage: https://github.com/azproduction/promise-queue#readme
- Issues: https://github.com/azproduction/promise-queue/issues
- npm.io page: https://npm.io/package/promise-queue

## Recent versions

- 2.2.5 (latest) — 2018-01-28
- 2.2.4 — 2018-01-28
- 2.2.3 — 2016-02-10
- 2.2.2 — 2016-01-05
- 2.2.1 — 2016-01-05
- 2.2.0 — 2015-11-24
- 2.1.2 — 2015-10-30
- 2.1.1 — 2014-07-09
- 2.0.1 — 2014-07-09
- 2.0.0 — 2014-03-09
- 1.0.1 — 2014-02-19
- 1.0.0 — 2013-12-16

## README

# promise-queue [![NPM Version](https://badge.fury.io/js/promise-queue.png)](https://npmjs.org/package/promise-queue) [![Build Status](https://travis-ci.org/azproduction/promise-queue.png?branch=master)](https://travis-ci.org/azproduction/promise-queue) [![Coverage Status](https://coveralls.io/repos/azproduction/promise-queue/badge.png?branch=master)](https://coveralls.io/r/azproduction/promise-queue) [![Dependency Status](https://gemnasium.com/azproduction/promise-queue.png)](https://gemnasium.com/azproduction/promise-queue)

Promise-based queue

## Installation

`promise-queue` can be installed using `npm`:

```
npm install promise-queue
```

## Interface

 - `new Queue(Number maxConcurrent, Number maxQueued): Queue`
 - `Queue#add(Function generator): Promise` - adds function argument that generates a promise to the queue
 - `Queue#getQueueLength(): Number` - returns current length of buffer(added but not started promise generators) `it <= maxQueued`
 - `Queue#getPendingLength(): Number` - returns number of pending(concurrently running) promises `it <= maxConcurrent`

## Example

### Configure queue

By default `Queue` tries to use global Promises, but you can specify your own promises.

```js
Queue.configure(require('vow').Promise);
```

Or use old-style promises approach:

```js
Queue.configure(function (handler) {
    var dfd = $.Deferred();
    try {
        handler(dfd.resolve, dfd.reject, dfd.notify);
    } catch (e) {
        dfd.reject(e);
    }
    return dfd.promise();
});
```

### Queue one by one example

```js
var maxConcurrent = 1;
var maxQueue = Infinity;
var queue = new Queue(maxConcurrent, maxQueue);

app.get('/version/:user/:repo', function (req, res, next) {
    queue.add(function () {
        // Assume that this action is a way too expensive
        // Call of this function will be delayed on second request
        return downloadTarballFromGithub(req.params);
    })
    .then(parseJson('package.json'))
    .then(function (package) {
        res.send(package.version);
    })
    .catch(next);
});
```

### Getting number of pending promises and queue(buffered promises) length

```js
var maxConcurrent = 1;
var maxQueue = 1;
var queue = new Queue(maxConcurrent, maxQueue);

queue.add(function () {
    queue.getQueueLength() === 0;
    queue.getPendingLength() === 1;
    return somePromise();
});

queue.add(function () {
    queue.getQueueLength() === 0;
    queue.getPendingLength() === 0;
    return somePromise();
});

queue.getQueueLength() === 1;
queue.getPendingLength() === 1;
```

[Live example](http://jsfiddle.net/RVuEU/1/)

---
_Source: https://npm.io/package/promise-queue · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
