@shanyue/promise-utils
Version:
Userful promise utils, include map, filter, retry and sleep
55 lines • 1.68 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const mocha_1 = require("mocha");
const chai_1 = require("chai");
const index_1 = require("../index");
mocha_1.describe('Promise.retry', function () {
this.timeout(20000);
mocha_1.it('expect work', async () => {
let i = 0;
const result = 100;
const data = await index_1.retry(async (attemptNumber) => {
i++;
return attemptNumber === 3 ? result : Promise.reject(new Error('error'));
}, {
times: 3
});
chai_1.expect(data).to.eq(100);
chai_1.expect(i).to.eq(3);
});
mocha_1.it('abort', async () => {
let i = 0;
const err = new index_1.AbortError('hello');
try {
await index_1.retry(async () => {
i++;
return Promise.reject(err);
}, {
times: 3
});
}
catch (e) {
chai_1.expect(e).to.equal(err);
}
chai_1.expect(i).to.eq(1);
});
mocha_1.it('onFailedAttempt can return a promise to add a delay', async () => {
const waitFor = 1000;
const start = Date.now();
const result = 100;
let isCalled;
await index_1.retry(async () => {
if (isCalled) {
return result;
}
isCalled = true;
throw new Error('error');
}, {
onFailedAttempt: async () => {
await index_1.sleep(waitFor);
}
});
chai_1.expect(Date.now()).to.gt(start + waitFor);
});
});
//# sourceMappingURL=retry.js.map