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)
You know this:
npm install a-promise-queue --save
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.lengthReturns 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:{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.
varPromiseQueue=require('a-promise-queue');vardelay=(ms)=>()=>newPromise(resolve=>setTimeout(resolve,ms));varqueue=newPromiseQueue(()=>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.'));