UNPKG

mana-common

Version:

Common utils for mana

45 lines (35 loc) 1.18 kB
"use strict"; 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; }