envio
Version:
A latency and sync speed optimized, developer friendly blockchain data indexer.
41 lines (36 loc) • 1.91 kB
JavaScript
// Generated by ReScript, PLEASE EDIT WITH CARE
;
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 */