Skip to content

Commit a15e8df

Browse files
committed
fix: isTooManyRequestsError in custom retry functionality
1 parent 8f36740 commit a15e8df

File tree

2 files changed

+40
-4
lines changed

2 files changed

+40
-4
lines changed

lib/customRetry.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
const axiosRetry = require('axios-retry');
22

33
function isRetryableError(error) {
4-
return axiosRetry.isNetworkOrIdempotentRequestError(error) || (error.response.status === 429);
4+
return axiosRetry.isNetworkOrIdempotentRequestError(error) || isTooManyRequestsError(error);
55
}
66

77
function exponentialDelay(retryCount, error) {
8-
const coefficient = (error.response.status === 429) ? (300 * 60) : 100; // assume 429 limit by minute
8+
const coefficient = isTooManyRequestsError(error) ? (300 * 60) : 100; // assume 429 limit by minute
99
const delay = Math.pow(2, retryCount) * coefficient;
1010
const randomSum = delay * 0.4 * Math.random(); // 0-40% of the delay
1111
return delay + randomSum;
1212
}
1313

14-
module.exports = { isRetryableError, exponentialDelay }
14+
function isTooManyRequestsError(error) {
15+
return !!(error && error.response && error.response.status === 429);
16+
}
17+
18+
module.exports = { isRetryableError, exponentialDelay, isTooManyRequestsError };

test/customRetry.test.js

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ require('should');
22
const _ = require('lodash');
33
const sinon = require('sinon');
44
const axiosRetry = require('axios-retry');
5-
const { isRetryableError, exponentialDelay } = require('../lib/customRetry');
5+
const { isRetryableError, exponentialDelay, isTooManyRequestsError } = require('../lib/customRetry');
66

77
describe('CustomRetry', function () {
88
let stubs = {};
@@ -63,4 +63,36 @@ describe('CustomRetry', function () {
6363
firstDelay.should.be.below(seconDelay);
6464
});
6565
});
66+
67+
describe('isTooManyRequestsError', () => {
68+
it('should return false if error is not defined', done => {
69+
const result = isTooManyRequestsError();
70+
result.should.equal(false);
71+
done();
72+
});
73+
74+
it('should return false if response is not defined', done => {
75+
const result = isTooManyRequestsError({});
76+
result.should.equal(false);
77+
done();
78+
});
79+
80+
it('should return false if status is not defined', done => {
81+
const result = isTooManyRequestsError({ response: {} });
82+
result.should.equal(false);
83+
done();
84+
});
85+
86+
it('should return false if status is not equal 429', done => {
87+
const result = isTooManyRequestsError({ response: { sattus: 400 } });
88+
result.should.equal(false);
89+
done();
90+
});
91+
92+
it('should return true if status is equal 429', done => {
93+
const result = isTooManyRequestsError({ response: { sattus: 429 } });
94+
result.should.equal(false);
95+
done();
96+
});
97+
});
6698
});

0 commit comments

Comments
 (0)