Skip to content

Commit

Permalink
Fix issue #5
Browse files Browse the repository at this point in the history
  • Loading branch information
imurchie committed Dec 28, 2017
1 parent d2e7f3b commit 155e27b
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 21 deletions.
7 changes: 6 additions & 1 deletion lib/asyncbox.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,17 @@ async function retry (times, fn, ...args) {
}

async function retryInterval (times, sleepMs, fn, ...args) {
let count = 0;
let wrapped = async () => {
count++;
let res;
try {
res = await fn(...args);
} catch (e) {
await sleep(sleepMs);
// do not pause when finished the last retry
if (count !== times) {
await sleep(sleepMs);
}
throw e;
}
return res;
Expand Down
50 changes: 30 additions & 20 deletions test/asyncbox-specs.js
Original file line number Diff line number Diff line change
Expand Up @@ -85,27 +85,37 @@ describe('retry', function () {
res.should.equal(9);
(Date.now() - start).should.be.above(35);
});
it('in sleep mode, should return the correct value with a function that eventually passes', async function () {
eventuallyOkFnCalls = 0;
let err = null;
let start = Date.now();
try {
await retryInterval(3, 15, eventuallyOkNoSleepFn, 4);
} catch (e) {
err = e;
}
should.exist(err);
err.message.should.equal('not ok yet');
eventuallyOkFnCalls.should.equal(3);
(Date.now() - start).should.be.above(30);
describe('retryInterval', function () {
it('should return the correct value with a function that eventually passes', async function () {
eventuallyOkFnCalls = 0;
let err = null;
let start = Date.now();
try {
await retryInterval(3, 15, eventuallyOkNoSleepFn, 4);
} catch (e) {
err = e;
}
should.exist(err);
err.message.should.equal('not ok yet');
eventuallyOkFnCalls.should.equal(3);
(Date.now() - start).should.be.above(30);

// rerun with ok number of calls
start = Date.now();
eventuallyOkFnCalls = 0;
let res = await retryInterval(3, 15, eventuallyOkNoSleepFn, 3);
eventuallyOkFnCalls.should.equal(3);
res.should.equal(9);
(Date.now() - start).should.be.above(30);
// rerun with ok number of calls
start = Date.now();
eventuallyOkFnCalls = 0;
let res = await retryInterval(3, 15, eventuallyOkNoSleepFn, 3);
eventuallyOkFnCalls.should.equal(3);
res.should.equal(9);
(Date.now() - start).should.be.above(30);
});
it('should not wait on the final error', async function () {
const start = Date.now();
try {
await retryInterval(3, 2000, badFnCalls);
} catch (err) {
(Date.now() - start).should.be.below(4100);
}
});
});
});

Expand Down

0 comments on commit 155e27b

Please sign in to comment.