Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 'use strict';
- const _ = require('lodash');
- const Q = require('q');
- function promiseQueue(options) {
- options = _.assign({
- concurrency: 1
- }, options);
- let queue = [];
- let running = 0;
- function processQueue() {
- while (running < options.concurrency && queue.length) {
- let state = queue.shift();
- running += 1;
- let fnPromise = Q.try(state.fn);
- state.d.resolve(fnPromise);
- fnPromise.finally(() => {
- running -= 1;
- processQueue();
- });
- }
- }
- return function enqueue(fn) {
- let d = Q.defer();
- queue.push({ fn, d });
- processQueue();
- return d.promise;
- };
- }
- module.exports = promiseQueue;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement