-
Notifications
You must be signed in to change notification settings - Fork 75
/
requester.js
73 lines (61 loc) · 1.46 KB
/
requester.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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
require('isomorphic-fetch');
let headers = {};
const addHeader = (name, value) => { headers[name] = value };
const clearHeaders = () => { headers = {} };
const get = (uri) => {
const options = {
method: 'GET',
headers: {
'Connection': 'keep-alive',
'Accept': 'application/json'
}
};
return request(uri, options);
};
const request = (uri, opts) => {
const requestHeaders = Object.assign(
{},
opts.headers,
headers
);
const options = Object.assign(
{},
opts,
{ headers: requestHeaders }
);
return fetchWithRetry(uri, options);
};
function fetchWithRetry(url, options) {
var retries = 3;
var retryDelay = 500;
if (options && options.retries) {
retries = options.retries;
}
if (options && options.retryDelay) {
retryDelay = options.retryDelay;
}
return new Promise(function(resolve, reject) {
var wrappedFetch = (n) => {
fetch(url, options)
.then(response => {
resolve(response);
})
.catch(error => {
if (n <= retries) {
setTimeout(() => {
wrappedFetch(n + 1);
}, retryDelay * Math.pow(2, n));
} else {
reject(error);
}
});
};
wrappedFetch(0);
});
}
export default {
addHeader,
clearHeaders,
get,
request
};