Some checks failed
No response / noResponse (push) Has been cancelled
CI / Continuous releases (push) Has been cancelled
CI / test-dev (macos-latest) (push) Has been cancelled
CI / test-dev (ubuntu-latest) (push) Has been cancelled
CI / test-dev (windows-latest) (push) Has been cancelled
Maintenance / main (push) Has been cancelled
Scorecards supply-chain security / Scorecards analysis (push) Has been cancelled
CodeQL / Analyze (push) Has been cancelled
35 lines
638 B
JavaScript
35 lines
638 B
JavaScript
// Inspired by https://github.com/zeit/async-retry
|
|
// Without the retry dependency (1 kB gzipped +)
|
|
async function retry(tryFunction, options = {}) {
|
|
const { retries = 3 } = options;
|
|
|
|
let tries = 0;
|
|
let output = null;
|
|
let exitErr = null;
|
|
|
|
const bail = (err) => {
|
|
exitErr = err;
|
|
};
|
|
|
|
while (tries < retries) {
|
|
tries += 1;
|
|
try {
|
|
// eslint-disable-next-line no-await-in-loop
|
|
output = await tryFunction({ tries, bail });
|
|
break;
|
|
} catch (err) {
|
|
if (tries >= retries) {
|
|
throw err;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (exitErr) {
|
|
throw exitErr;
|
|
}
|
|
|
|
return output;
|
|
}
|
|
|
|
export default retry;
|