-
Notifications
You must be signed in to change notification settings - Fork 0
/
backoff.js
39 lines (30 loc) · 846 Bytes
/
backoff.js
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
'use strict';
// This is a mock database implementation with just a connect function
// db.connect will need to be called a total of 10 times before it successfully
var counter = 0;
var db = {
connect: function(cb) {
console.log('connection attempt', counter + 1);
if (counter < 9) {
counter++;
return cb('db not ready yet');
}
return cb();
}
};
var connectCallback = function(err) {
if (err) {
console.error(err);
return;
}
console.log('successfully connected!');
};
function exponentialBackoff(fn, max, delay, callback) {
fn();
if (max > 1) {
return setTimeout(function() {
exponentialBackoff(fn, --max, delay * 2);
}, delay);
}
}
exponentialBackoff(db.connect.bind(null, connectCallback), 10, 10);