UNPKG

4.73 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.sleep = sleep;
7exports.asyncRetry = asyncRetry;
8
9async function sleep(periodMs = 0) {
10 return await new Promise(r => setTimeout(r, periodMs));
11}
12/**
13 * Retries the execution of an async function
14 */
15// $FlowIgnore
16
17
18async function asyncRetry(asyncFunc, options = {}) {
19 // set defaults
20 options.maxRetries = typeof options.maxRetries === 'undefined' ? 2 : options.maxRetries;
21 if (typeof options.maxRetries !== 'number') throw new Error(`options.maxRetries is of an invalid type`);
22 let triesExecuted = 0;
23 let nextBackoffMs = options.expoBackoffMs;
24 /* eslint-disable no-constant-condition */
25
26 while (true) {
27 try {
28 triesExecuted++;
29 return await asyncFunc(triesExecuted);
30 } catch (err) {
31 if (options.asyncErrorHandler) {
32 await options.asyncErrorHandler(err, triesExecuted);
33 }
34
35 if (triesExecuted > options.maxRetries) {
36 if (typeof err === 'object') {
37 err._triesExecuted = triesExecuted;
38 }
39
40 throw err;
41 }
42
43 if (nextBackoffMs) {
44 await sleep(nextBackoffMs);
45 nextBackoffMs *= 1.5;
46 }
47 }
48 }
49}
50//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9hc3luY1V0aWxzLmpzIl0sIm5hbWVzIjpbInNsZWVwIiwicGVyaW9kTXMiLCJQcm9taXNlIiwiciIsInNldFRpbWVvdXQiLCJhc3luY1JldHJ5IiwiYXN5bmNGdW5jIiwib3B0aW9ucyIsIm1heFJldHJpZXMiLCJFcnJvciIsInRyaWVzRXhlY3V0ZWQiLCJuZXh0QmFja29mZk1zIiwiZXhwb0JhY2tvZmZNcyIsImVyciIsImFzeW5jRXJyb3JIYW5kbGVyIiwiX3RyaWVzRXhlY3V0ZWQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBUU8sZUFBZUEsS0FBZixDQUFxQkMsUUFBZ0IsR0FBRyxDQUF4QyxFQUEyQztBQUNoRCxTQUFPLE1BQU0sSUFBSUMsT0FBSixDQUFZQyxDQUFDLElBQUlDLFVBQVUsQ0FBQ0QsQ0FBRCxFQUFJRixRQUFKLENBQTNCLENBQWI7QUFDRDtBQUVEOzs7QUFHQTs7O0FBQ08sZUFBZUksVUFBZixDQUE2QkMsU0FBN0IsRUFBaUZDLE9BQTBCLEdBQUcsRUFBOUcsRUFBOEg7QUFFbkk7QUFDQUEsRUFBQUEsT0FBTyxDQUFDQyxVQUFSLEdBQXNCLE9BQU9ELE9BQU8sQ0FBQ0MsVUFBZixLQUE4QixXQUEvQixHQUE4QyxDQUE5QyxHQUFrREQsT0FBTyxDQUFDQyxVQUEvRTtBQUVBLE1BQUksT0FBT0QsT0FBTyxDQUFDQyxVQUFmLEtBQThCLFFBQWxDLEVBQ0UsTUFBTSxJQUFJQyxLQUFKLENBQVcsMENBQVgsQ0FBTjtBQUVGLE1BQUlDLGFBQWEsR0FBRyxDQUFwQjtBQUNBLE1BQUlDLGFBQWEsR0FBR0osT0FBTyxDQUFDSyxhQUE1QjtBQUNBOztBQUNBLFNBQU8sSUFBUCxFQUFhO0FBQ1gsUUFBSTtBQUNGRixNQUFBQSxhQUFhO0FBQ2IsYUFBTyxNQUFNSixTQUFTLENBQUNJLGFBQUQsQ0FBdEI7QUFDRCxLQUhELENBR0UsT0FBT0csR0FBUCxFQUFZO0FBQ1osVUFBSU4sT0FBTyxDQUFDTyxpQkFBWixFQUErQjtBQUM3QixjQUFNUCxPQUFPLENBQUNPLGlCQUFSLENBQTBCRCxHQUExQixFQUErQkgsYUFBL0IsQ0FBTjtBQUNEOztBQUNELFVBQUlBLGFBQWEsR0FBR0gsT0FBTyxDQUFDQyxVQUE1QixFQUF3QztBQUN0QyxZQUFJLE9BQU9LLEdBQVAsS0FBZSxRQUFuQixFQUE2QjtBQUMzQkEsVUFBQUEsR0FBRyxDQUFDRSxjQUFKLEdBQXFCTCxhQUFyQjtBQUNEOztBQUNELGNBQU1HLEdBQU47QUFDRDs7QUFDRCxVQUFJRixhQUFKLEVBQW1CO0FBQ2pCLGNBQU1YLEtBQUssQ0FBQ1csYUFBRCxDQUFYO0FBQ0FBLFFBQUFBLGFBQWEsSUFBSSxHQUFqQjtBQUNEO0FBQ0Y7QUFDRjtBQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcblxudHlwZSBBc3luY1JldHJ5T3B0aW9ucyA9IHtcbiAgbWF4UmV0cmllcz86ID9udW1iZXIsXG4gIGV4cG9CYWNrb2ZmTXM/OiA/bnVtYmVyLFxuICBhc3luY0Vycm9ySGFuZGxlcj86ID8oZXJyOiBFcnJvciwgdHJpZXNFeGVjdXRlZDogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzbGVlcChwZXJpb2RNczogbnVtYmVyID0gMCkge1xuICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIHBlcmlvZE1zKSlcbn1cblxuLyoqXG4gKiBSZXRyaWVzIHRoZSBleGVjdXRpb24gb2YgYW4gYXN5bmMgZnVuY3Rpb25cbiAqL1xuLy8gJEZsb3dJZ25vcmVcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3luY1JldHJ5PFQ+KGFzeW5jRnVuYzogKHRyaWVzRXhlY3V0ZWQ/OiA/bnVtYmVyKSA9PiBQcm9taXNlPFQ+LCBvcHRpb25zOiBBc3luY1JldHJ5T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxUPiB7XG5cbiAgLy8gc2V0IGRlZmF1bHRzXG4gIG9wdGlvbnMubWF4UmV0cmllcyA9ICh0eXBlb2Ygb3B0aW9ucy5tYXhSZXRyaWVzID09PSAndW5kZWZpbmVkJykgPyAyIDogb3B0aW9ucy5tYXhSZXRyaWVzXG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zLm1heFJldHJpZXMgIT09ICdudW1iZXInKVxuICAgIHRocm93IG5ldyBFcnJvcihgb3B0aW9ucy5tYXhSZXRyaWVzIGlzIG9mIGFuIGludmFsaWQgdHlwZWApXG5cbiAgbGV0IHRyaWVzRXhlY3V0ZWQgPSAwXG4gIGxldCBuZXh0QmFja29mZk1zID0gb3B0aW9ucy5leHBvQmFja29mZk1zXG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnN0YW50LWNvbmRpdGlvbiAqL1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIHRyeSB7XG4gICAgICB0cmllc0V4ZWN1dGVkKytcbiAgICAgIHJldHVybiBhd2FpdCBhc3luY0Z1bmModHJpZXNFeGVjdXRlZClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChvcHRpb25zLmFzeW5jRXJyb3JIYW5kbGVyKSB7XG4gICAgICAgIGF3YWl0IG9wdGlvbnMuYXN5bmNFcnJvckhhbmRsZXIoZXJyLCB0cmllc0V4ZWN1dGVkKVxuICAgICAgfVxuICAgICAgaWYgKHRyaWVzRXhlY3V0ZWQgPiBvcHRpb25zLm1heFJldHJpZXMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlcnIgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgZXJyLl90cmllc0V4ZWN1dGVkID0gdHJpZXNFeGVjdXRlZFxuICAgICAgICB9XG4gICAgICAgIHRocm93IGVyclxuICAgICAgfVxuICAgICAgaWYgKG5leHRCYWNrb2ZmTXMpIHtcbiAgICAgICAgYXdhaXQgc2xlZXAobmV4dEJhY2tvZmZNcylcbiAgICAgICAgbmV4dEJhY2tvZmZNcyAqPSAxLjVcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0iXX0=
\No newline at end of file