pulse-till-done.js 750 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. "use strict";
  2. const log = require("npmlog");
  3. let pulsers = 0;
  4. let pulse;
  5. function pulseStart(prefix) {
  6. pulsers += 1;
  7. if (pulsers > 1) {
  8. return;
  9. }
  10. pulse = setInterval(() => log.gauge.pulse(prefix), 150);
  11. }
  12. function pulseStop() {
  13. pulsers -= 1;
  14. if (pulsers > 0) {
  15. return;
  16. }
  17. clearInterval(pulse);
  18. }
  19. function pulseTillDone(prefix, promise) {
  20. if (!promise) {
  21. /* eslint-disable no-param-reassign */
  22. promise = prefix;
  23. prefix = "";
  24. /* eslint-enable no-param-reassign */
  25. }
  26. pulseStart(prefix);
  27. return Promise.resolve(promise).then(
  28. (val) => {
  29. pulseStop();
  30. return val;
  31. },
  32. (err) => {
  33. pulseStop();
  34. throw err;
  35. }
  36. );
  37. }
  38. module.exports.pulseTillDone = pulseTillDone;