UNPKG

a-promise-queue

Version:

A native es6 promise queue with optional retry attempts.

62 lines (47 loc) 2.21 kB
# a promise queue [![Build Status](https://travis-ci.org/e-e-e/a-promise-queue.svg?branch=master)](https://travis-ci.org/e-e-e/a-promise-queue) [![Coverage Status](https://coveralls.io/repos/github/e-e-e/a-promise-queue/badge.svg?branch=master)](https://coveralls.io/github/e-e-e/a-promise-queue?branch=master) This is just another promise queue. Simple. + Native es6 + With concurrency + Optional retry attempts for failed promises + Option to use your favourite promise flavour (Bluebird, Q) ## Install You know this: ``` npm install a-promise-queue --save ``` ## Interface + `queue = new PromiseQueue([options], [Function callback])` Callback is fired whenever queue is emptied. If callback is not provided, queue will act as a promise which is resolved once queue is finished. Options: ``` { promise: Promise, // the type of promises used. defaults to es6 native promises, concurrency: Number // set the number of promises to run in parallel. } ``` + `queue.length` Returns number of promises waiting to be executed. + `var promise = queue.add(Function generator, [Object options])` Returns a promise which is resolved or rejected when the promise produced by the generator is eventually resolved. Example options: ```js { attempts: number, // if promise fails it will retry this many times. priority: number, // execution is ordered by priority default = 0. } ``` + `var promise = queue.flush()` Runs all promises currently in the queue concurrently. Returns a promise which is resolved when all promises are finished. Any promises added after `.flush()` will execute after flush is complete. ## Example: ```js var PromiseQueue = require('a-promise-queue'); var delay = (ms) => () => new Promise(resolve => setTimeout(resolve, ms)); var queue = new PromiseQueue(() => console.log('Queue is empty')); queue.add(delay(100)).then(() => console.log('first this')); queue.add(() => Promise.reject('then this fails')).catch((e) => console.log('Errored:', e)); queue.add(delay(10)).then(() => console.log('and this succeeds')); queue.add(delay(10), { priority: 1 }).then(() => console.log('but not before this one jumps the queue.')); ```