Skip to content
目录

Promise 请求重试

简单实现一下 retryRequest

ts
function retryRequestCreator(times: number) {
  let count = times;
  return () =>
    new Promise((resolve, reject) => {
      if (!count) resolve("success");
      else {
        reject("error");
        count--;
      }
    });
}

function retryRequest(
  request: () => Promise<unknown>,
  retryTimes: number
): Promise<unknown> {
  return new Promise((resolve, reject) => {
    (function retry() {
      if (!retryTimes) {
        return request().then(resolve, reject);
      }
      request()
        .then(resolve)
        .catch((err) => {
          console.log(err, `Remaining ${retryTimes} times`);
          retryTimes--;
          retry();
        });
    })();
  });
}

retryRequest(retryRequestCreator(2), 2).then(console.log).catch(console.log);
/*
error Remaining 2 times
error Remaining 1 times
success
*/
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

Released under the MIT License.