delay.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. "use strict";
  2. var _AbortController = require("./AbortController.js");
  3. function delay(ms, opts) {
  4. return new Promise((resolve, reject) => {
  5. var _opts$signal, _opts$signal2;
  6. if (opts != null && (_opts$signal = opts.signal) != null && _opts$signal.aborted) {
  7. return reject((0, _AbortController.createAbortError)());
  8. }
  9. const timeout = setTimeout(() => {
  10. cleanup(); // eslint-disable-line no-use-before-define
  11. resolve();
  12. }, ms);
  13. function onabort() {
  14. clearTimeout(timeout);
  15. cleanup(); // eslint-disable-line no-use-before-define
  16. reject((0, _AbortController.createAbortError)());
  17. }
  18. opts == null ? void 0 : (_opts$signal2 = opts.signal) == null ? void 0 : _opts$signal2.addEventListener('abort', onabort);
  19. function cleanup() {
  20. var _opts$signal3;
  21. opts == null ? void 0 : (_opts$signal3 = opts.signal) == null ? void 0 : _opts$signal3.removeEventListener('abort', onabort);
  22. }
  23. return undefined;
  24. });
  25. }
  26. /**
  27. * Return a Promise that resolves after `ms` milliseconds.
  28. *
  29. * @param {number} ms - Number of milliseconds to wait.
  30. * @param {{ signal?: AbortSignal }} [opts] - An abort signal that can be used to cancel the delay early.
  31. * @returns {Promise<void>} A Promise that resolves after the given amount of `ms`.
  32. */
  33. module.exports = delay;