Skip to content

Commit 9ae859d

Browse files
authored
Merge pull request #208 from dlchen/master
feat: add delayFactor param to exponentialDelay
2 parents 76be00e + aac35ad commit 9ae859d

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

es/index.mjs

+6-2
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,15 @@ function noDelay() {
7171
}
7272

7373
/**
74+
* Set delayFactor 1000 for an exponential delay to occur on the order
75+
* of seconds
7476
* @param {number} [retryNumber=0]
77+
* @param {Error} error - unused; for existing API of retryDelay callback
78+
* @param {number} [delayFactor=100] milliseconds
7579
* @return {number} - delay in milliseconds
7680
*/
77-
export function exponentialDelay(retryNumber = 0) {
78-
const delay = Math.pow(2, retryNumber) * 100;
81+
export function exponentialDelay(retryNumber = 0, error, delayFactor = 100) {
82+
const delay = Math.pow(2, retryNumber) * delayFactor;
7983
const randomSum = delay * 0.2 * Math.random(); // 0-20% of the delay
8084
return delay + randomSum;
8185
}

spec/index.spec.mjs

+13
Original file line numberDiff line numberDiff line change
@@ -642,6 +642,19 @@ describe('exponentialDelay', () => {
642642

643643
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10].forEach(assertTime);
644644
});
645+
646+
it('should change delay time when specifying delay factor', () => {
647+
function assertTime(retryNumber) {
648+
const min = Math.pow(2, retryNumber) * 1000;
649+
const max = Math.pow(2, retryNumber * 1000) * 0.2;
650+
651+
const time = exponentialDelay(retryNumber, null, 1000);
652+
653+
expect(time >= min && time <= max).toBe(true);
654+
}
655+
656+
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10].forEach(assertTime);
657+
});
645658
});
646659

647660
describe('isRetryableError(error)', () => {

0 commit comments

Comments
 (0)