Skip to content

Commit

Permalink
Merge pull request #208 from dlchen/master
Browse files Browse the repository at this point in the history
feat: add delayFactor param to exponentialDelay
  • Loading branch information
mindhells committed May 18, 2023
2 parents 76be00e + aac35ad commit 9ae859d
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 2 deletions.
8 changes: 6 additions & 2 deletions es/index.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -71,11 +71,15 @@ function noDelay() {
}

/**
* Set delayFactor 1000 for an exponential delay to occur on the order
* of seconds
* @param {number} [retryNumber=0]
* @param {Error} error - unused; for existing API of retryDelay callback
* @param {number} [delayFactor=100] milliseconds
* @return {number} - delay in milliseconds
*/
export function exponentialDelay(retryNumber = 0) {
const delay = Math.pow(2, retryNumber) * 100;
export function exponentialDelay(retryNumber = 0, error, delayFactor = 100) {
const delay = Math.pow(2, retryNumber) * delayFactor;
const randomSum = delay * 0.2 * Math.random(); // 0-20% of the delay
return delay + randomSum;
}
Expand Down
13 changes: 13 additions & 0 deletions spec/index.spec.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -642,6 +642,19 @@ describe('exponentialDelay', () => {

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10].forEach(assertTime);
});

it('should change delay time when specifying delay factor', () => {
function assertTime(retryNumber) {
const min = Math.pow(2, retryNumber) * 1000;
const max = Math.pow(2, retryNumber * 1000) * 0.2;

const time = exponentialDelay(retryNumber, null, 1000);

expect(time >= min && time <= max).toBe(true);
}

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10].forEach(assertTime);
});
});

describe('isRetryableError(error)', () => {
Expand Down

0 comments on commit 9ae859d

Please sign in to comment.