UNPKG

@shanyue/promise-utils

Version:

Userful promise utils, include map, filter, retry and sleep

69 lines (54 loc) 1.29 kB
import { describe, it } from 'mocha' import { expect } from 'chai' import { AbortError, retry, sleep } from '../index' describe('Promise.retry', function () { this.timeout(20000) it('expect work', async () => { let i = 0 const result = 100 const data = await retry(async attemptNumber => { i++ return attemptNumber === 3 ? result : Promise.reject(new Error('error')) }, { times: 3 }) expect(data).to.eq(100) expect(i).to.eq(3) }) it('abort', async () => { let i = 0 const err = new AbortError('hello') try { await retry(async () => { i++ return Promise.reject(err) }, { times: 3 }) } catch (e) { expect(e).to.equal(err) } expect(i).to.eq(1) }) it('onFailedAttempt can return a promise to add a delay', async () => { const waitFor = 1000 const start = Date.now() const result = 100 let isCalled: boolean await retry( async () => { if (isCalled) { return result } isCalled = true throw new Error('error') }, { onFailedAttempt: async () => { await sleep(waitFor) } } ) expect(Date.now()).to.gt(start + waitFor) }) })