UNPKG

1.34 kBJavaScriptView Raw
1var retries = require('./retries');
2
3
4/**
5 * Add to the request prototype.
6 */
7
8module.exports = function (superagent) {
9 var Request = superagent.Request;
10 Request.prototype.retry = retry;
11 return superagent;
12};
13
14
15/**
16 * Export retries for extending
17 */
18
19module.exports.retries = retries;
20
21
22/**
23 * Sets the amount of times to retry the request
24 * @param {Number} count
25 */
26
27function retry (retries) {
28
29 var self = this
30 , oldEnd = this.end;
31
32 retries = retries || 1;
33
34 this.end = function (fn) {
35 var timeout = this._timeout;
36
37 function attemptRetry () {
38 return oldEnd.call(self, function (err, res) {
39 if (!retries || !shouldRetry(err, res)) return fn && fn(err, res);
40
41 reset(self, timeout);
42
43 retries--;
44 return attemptRetry();
45 });
46 }
47
48 return attemptRetry();
49 };
50
51 return this;
52}
53
54
55/**
56 * HACK: Resets the internal state of a request:
57 */
58
59function reset (request, timeout) {
60 request.req.abort();
61 request.called = false;
62 request.timeout(timeout);
63
64 delete request.req;
65 delete request._timer;
66}
67
68
69/**
70 * Determine whether we should retry based upon common error conditions
71 * @param {Error} err
72 * @param {Response} res
73 * @return {Boolean}
74 */
75
76function shouldRetry (err, res) {
77 return retries.some(function (check) { return check(err, res); });
78}
\No newline at end of file