Advertisement
Guest User

Untitled

a guest
Sep 27th, 2016
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.76 KB | None | 0 0
  1. 'use strict';
  2.  
  3. const _ = require('lodash');
  4. const Q = require('q');
  5.  
  6. function promiseQueue(options) {
  7. options = _.assign({
  8. concurrency: 1
  9. }, options);
  10.  
  11. let queue = [];
  12.  
  13. let running = 0;
  14.  
  15. function processQueue() {
  16. while (running < options.concurrency && queue.length) {
  17. let state = queue.shift();
  18.  
  19. running += 1;
  20.  
  21. let fnPromise = Q.try(state.fn);
  22.  
  23. state.d.resolve(fnPromise);
  24.  
  25. fnPromise.finally(() => {
  26. running -= 1;
  27. processQueue();
  28. });
  29. }
  30. }
  31.  
  32. return function enqueue(fn) {
  33. let d = Q.defer();
  34.  
  35. queue.push({ fn, d });
  36. processQueue();
  37.  
  38. return d.promise;
  39. };
  40. }
  41.  
  42. module.exports = promiseQueue;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement