UNPKG

envio

Version:

A latency and sync speed optimized, developer friendly blockchain data indexer.

41 lines (36 loc) 1.91 kB
// Generated by ReScript, PLEASE EDIT WITH CARE 'use strict'; var Utils = require("./Utils.res.js"); var Logging = require("./Logging.res.js"); var ErrorHandling = require("./ErrorHandling.res.js"); var Caml_js_exceptions = require("rescript/lib/js/caml_js_exceptions.js"); function resolvePromiseAfterDelay(delayMilliseconds) { return Utils.delay(delayMilliseconds); } async function retryAsyncWithExponentialBackOff(backOffMillisOpt, multiplicativeOpt, retryCountOpt, maxRetriesOpt, logger, f) { var backOffMillis = backOffMillisOpt !== undefined ? backOffMillisOpt : 100; var multiplicative = multiplicativeOpt !== undefined ? multiplicativeOpt : 4; var retryCount = retryCountOpt !== undefined ? retryCountOpt : 0; var maxRetries = maxRetriesOpt !== undefined ? maxRetriesOpt : 5; try { return await f(); } catch (raw_exn){ var exn = Caml_js_exceptions.internalToOCamlException(raw_exn); if (retryCount < maxRetries) { var nextRetryCount = retryCount + 1 | 0; var log = retryCount === 0 ? Logging.childTrace : Logging.childWarn; log(logger, { msg: "Retrying query " + String(nextRetryCount) + "/" + String(maxRetries) + " in " + String(backOffMillis) + "ms - waiting for correct result.", err: Utils.prettifyExn(exn) }); await Utils.delay(backOffMillis); return await retryAsyncWithExponentialBackOff(Math.imul(backOffMillis, multiplicative), multiplicative, nextRetryCount, maxRetries, logger, f); } ErrorHandling.log(ErrorHandling.make(exn, logger, "Failure. Max retries " + String(retryCount) + "/" + String(maxRetries) + " exceeded")); return await Promise.reject(Caml_js_exceptions.internalToOCamlException(exn)); } } exports.resolvePromiseAfterDelay = resolvePromiseAfterDelay; exports.retryAsyncWithExponentialBackOff = retryAsyncWithExponentialBackOff; /* Utils Not a pure module */