forked from tzeikob/javascript-patterns
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrequest.js
40 lines (35 loc) · 1.01 KB
/
request.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
const request = require('request-promise');
// A dummy promise to emulate pause for some time in secs
const pause = function pause(secs) {
return new Promise(function(resolve, reject) {
setTimeout(resolve, secs * 1000);
});
};
// An async task to get the data of a github account
const task = async function task(options, retries) {
for (let i = 1; i <= retries; i++) {
try {
return await request(options);
} catch (err) {
console.log(`Request failed, ${err.message}`);
if (i < retries) {
console.log(` Retry again after 2 secs...`);
await pause(2);
}
}
}
throw new Error(`reached maximum number of retries: ${retries}`);
};
task({
uri: 'https://api.github.com/users/tzeikob',
headers: {
'User-Agent': 'Awesome-Promise'
},
json: true
}, 3)
.then(function(response) {
console.log(`Task succeed, ${response.login} has ${response.public_repos} repos`);
})
.catch(function(err) {
console.log(`Task failed, ${err.message}`);
});