| 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'))); |  | } | 
 |