mana-common
Version:
Common utils for mana
45 lines (35 loc) • 1.18 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.retry = retry;
exports.timeout = timeout;
var _cancellation = require("./cancellation");
var _deferred = require("./deferred");
/* eslint-disable @typescript-eslint/no-explicit-any */
/**
* @returns resolves after a specified number of milliseconds
* @throws cancelled if a given token is cancelled before a specified number of milliseconds
*/
function timeout(ms, token = _cancellation.CancellationToken.None) {
const deferred = new _deferred.Deferred();
const handle = setTimeout(() => deferred.resolve(), ms);
token.onCancellationRequested(() => {
clearTimeout(handle);
deferred.reject((0, _cancellation.cancelled)());
});
return deferred.promise;
}
async function retry(task, delay, retries) {
let lastError;
for (let i = 0; i < retries; i += 1) {
try {
// eslint-disable-next-line no-await-in-loop
return await task();
} catch (error) {
lastError = error; // eslint-disable-next-line no-await-in-loop
await timeout(delay);
}
} // eslint-disable-next-line @typescript-eslint/no-throw-literal
throw lastError;
}