-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathrequest.js
More file actions
39 lines (36 loc) · 899 Bytes
/
Copy pathrequest.js
File metadata and controls
39 lines (36 loc) · 899 Bytes
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
// 手写一个方法实现请求失败后一定时间重试,重试时间是上次的两倍
function request(callback, retry = 5, delay = 50) {
if (typeof callback !== 'function') {
callback = () => {
throw 'error';
};
}
let _retry = 0,
_delay = delay / 2;
const fetch = async (callback) => {
try {
await callback();
} catch (e) {
_retry++;
_delay *= 2;
if (_retry > retry) {
console.log('请求超时');
} else {
console.log(`第${_retry}次重试,重试时间是${_delay}ms`);
setTimeout(() => {
fetch();
}, _delay);
}
}
};
return fetch(callback);
}
request('qqq');
/*
第1次重试,重试时间是50ms
第2次重试,重试时间是100ms
第3次重试,重试时间是200ms
第4次重试,重试时间是400ms
第5次重试,重试时间是800ms
请求超时
*/