1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
| var retry = require('../lib/retry');
|
| function attemptAsyncOperation(someInput, cb) {
| var opts = {
| retries: 2,
| factor: 2,
| minTimeout: 1 * 1000,
| maxTimeout: 2 * 1000,
| randomize: true
| };
| var operation = retry.operation(opts);
|
| operation.attempt(function(currentAttempt) {
| failingAsyncOperation(someInput, function(err, result) {
|
| if (err && err.message === 'A fatal error') {
| operation.stop();
| return cb(err);
| }
|
| if (operation.retry(err)) {
| return;
| }
|
| cb(operation.mainError(), operation.errors(), result);
| });
| });
| }
|
| attemptAsyncOperation('test input', function(err, errors, result) {
| console.warn('err:');
| console.log(err);
|
| console.warn('result:');
| console.log(result);
| });
|
| function failingAsyncOperation(input, cb) {
| return setImmediate(cb.bind(null, new Error('A fatal error')));
| }
|
|