Skip to content

Commit 8b63aa4

Browse files
whitecrownclownleo
authored andcommitted
Pass attempt number to onRetry (#41)
* Pass attempt number to onRetry (#34) * Fix unit tests linting (#34) * Fix tests linting (#34)
1 parent a696d36 commit 8b63aa4

File tree

2 files changed

+62
-26
lines changed

2 files changed

+62
-26
lines changed

lib/index.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,14 @@ module.exports = (fn, opts) => {
1313
// would be futile (e.g.: auth errors)
1414
const bail = err => reject(err || new Error('Aborted'))
1515

16-
const onError = err => {
16+
const onError = (err, num) => {
1717
if (err.bail) {
1818
return bail(err)
1919
}
2020
if (!op.retry(err)) {
2121
reject(op.mainError())
2222
} else if (opts.onRetry) {
23-
opts.onRetry(err)
23+
opts.onRetry(err, num)
2424
}
2525
}
2626

@@ -30,10 +30,13 @@ module.exports = (fn, opts) => {
3030
try {
3131
val = fn(bail, num)
3232
} catch (err) {
33-
return onError(err)
33+
return onError(err, num)
3434
}
35-
36-
Promise.resolve(val).then(resolve, onError)
35+
Promise.resolve(val)
36+
.then(resolve)
37+
.catch(err => {
38+
onError(err, num)
39+
})
3740
})
3841
})
3942
}

test/index.js

Lines changed: 54 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,16 @@ test('chained promise', async t => {
3434

3535
test('bail', async t => {
3636
try {
37-
await retry(async (bail, num) => {
38-
if (num === 2) {
39-
bail(new Error('Wont retry'))
40-
}
37+
await retry(
38+
async (bail, num) => {
39+
if (num === 2) {
40+
bail(new Error('Wont retry'))
41+
}
4142

42-
throw new Error('Test ' + num)
43-
}, {retries: 3})
43+
throw new Error('Test ' + num)
44+
},
45+
{retries: 3}
46+
)
4447
} catch (err) {
4548
t.deepEqual('Wont retry', err.message)
4649
}
@@ -49,11 +52,13 @@ test('bail', async t => {
4952
test('bail + return', async t => {
5053
let _err
5154
try {
52-
await Promise.resolve(retry(async bail => {
53-
await sleep(200)
54-
await sleep(200)
55-
bail(new Error('woot'))
56-
}))
55+
await Promise.resolve(
56+
retry(async bail => {
57+
await sleep(200)
58+
await sleep(200)
59+
bail(new Error('woot'))
60+
})
61+
)
5762
} catch (err) {
5863
_err = err
5964
}
@@ -63,13 +68,16 @@ test('bail + return', async t => {
6368
test('bail error', async t => {
6469
let retries = 0
6570
try {
66-
await retry(async () => {
67-
retries++
68-
await sleep(100)
69-
const err = Error('Wont retry')
70-
err.bail = true
71-
throw err
72-
}, {retries: 3})
71+
await retry(
72+
async () => {
73+
retries++
74+
await sleep(100)
75+
const err = Error('Wont retry')
76+
err.bail = true
77+
throw err
78+
},
79+
{retries: 3}
80+
)
7381
} catch (err) {
7482
t.deepEqual('Wont retry', err.message)
7583
}
@@ -78,9 +86,12 @@ test('bail error', async t => {
7886

7987
test('with non-async functions', async t => {
8088
try {
81-
await retry((bail, num) => {
82-
throw new Error('Test ' + num)
83-
}, {retries: 2})
89+
await retry(
90+
(bail, num) => {
91+
throw new Error('Test ' + num)
92+
},
93+
{retries: 2}
94+
)
8495
} catch (err) {
8596
t.deepEqual('Test 3', err.message)
8697
}
@@ -90,3 +101,25 @@ test('return non-async', async t => {
90101
const val = await retry(() => 5)
91102
t.deepEqual(5, val)
92103
})
104+
105+
test('with number of retries', async t => {
106+
let retries = 0
107+
try {
108+
await retry(
109+
() => {
110+
return fetch('https://www.fakewikipedia.org')
111+
},
112+
{
113+
retries: 2,
114+
onRetry: (err, i) => {
115+
if (err) {
116+
console.log('Retry error : ', err)
117+
}
118+
retries = i
119+
}
120+
}
121+
)
122+
} catch (err) {
123+
t.deepEqual(retries, 2)
124+
}
125+
})

0 commit comments

Comments
 (0)