retryify.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. "use strict";
  2. /* IMPORT */
  3. Object.defineProperty(exports, "__esModule", { value: true });
  4. exports.retryifySync = exports.retryifyAsync = void 0;
  5. const retryify_queue_1 = require("./retryify_queue");
  6. /* RETRYIFY */
  7. const retryifyAsync = (fn, isRetriableError) => {
  8. return function (timestamp) {
  9. return function attempt() {
  10. return retryify_queue_1.default.schedule().then(cleanup => {
  11. return fn.apply(undefined, arguments).then(result => {
  12. cleanup();
  13. return result;
  14. }, error => {
  15. cleanup();
  16. if (Date.now() >= timestamp)
  17. throw error;
  18. if (isRetriableError(error)) {
  19. const delay = Math.round(100 + (400 * Math.random())), delayPromise = new Promise(resolve => setTimeout(resolve, delay));
  20. return delayPromise.then(() => attempt.apply(undefined, arguments));
  21. }
  22. throw error;
  23. });
  24. });
  25. };
  26. };
  27. };
  28. exports.retryifyAsync = retryifyAsync;
  29. const retryifySync = (fn, isRetriableError) => {
  30. return function (timestamp) {
  31. return function attempt() {
  32. try {
  33. return fn.apply(undefined, arguments);
  34. }
  35. catch (error) {
  36. if (Date.now() > timestamp)
  37. throw error;
  38. if (isRetriableError(error))
  39. return attempt.apply(undefined, arguments);
  40. throw error;
  41. }
  42. };
  43. };
  44. };
  45. exports.retryifySync = retryifySync;