-
-
Notifications
You must be signed in to change notification settings - Fork 98
/
retry.js
91 lines (40 loc) · 1.16 KB
/
retry.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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/* eslint-disable no-async-promise-executor */
/* eslint-disable no-await-in-loop */
// 题目:实现 Promise.retry,成功后 resolve 结果,失败后重试,尝试超过一定次数才真正的 reject
Promise.retry = function (promiseFn, times = 3) {
}
// 模拟promise
function getProm() {
const n = Math.random()
return new Promise((resolve, reject) => {
setTimeout(() => (n > 0.9 ? resolve(n) : reject(n)), 1000)
})
}
Promise.retry(getProm)
// 答案慎看
// /**
// * @description: 请求重试
// * @param {type} promiseFn
// * @param {type} times
// * @param {type} reject
// */
// Promise.retry = function (promiseFn, times = 3) {
// return new Promise(async (resolve, reject) => {
// // 重试次数
// while (times--) {
// try {
// let ret = await promiseFn()
// // 执行成功直接返回
// resolve(ret)
// break
// } catch (error) {
// // 重试机会
// console.log(`还剩${times}`)
// if (!times) {
// // 重试结束,抛出错误
// reject(error)
// }
// }
// }
// })
// }