首页 小组 问答 话题 好文 素材 用户 唠叨 我的社区

[代码]实现一个Promise.retry( )

msd123Lv.1普通用户
2024-10-10 14:46:52
0
21
  /**
   * 实现 Promise.retry , 重试异步函数
   * 失败后重试, 尝试指定次数后  抛出异常, reject
   */
  function fn() {
    const num = Math.random();
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        if (num > 0.7) {
          resolve(num);
        } else {
          reject(num);
        }
      }, num * 2000)
    })
  }
  Promise.retry = (fn, times) => {
    let total = times;
    new Promise(async (resolve, reject) => {
      while (total--) {
        try {
          const res = await fn();
          console.log('执行成功,结果为:', res);
          resolve(res);
          break;
        } catch (err) {
          // 到达指定times结束循环
          if (!total) {
            reject(err);
          }
        }
      }
    }).catch(() => {
      console.log('执行完成,' + times + '次全部失败...');
    })
  }

  Promise.retry(fn, 7);
msd123
msd123

12 天前

签名 : 我想搞个音乐网,有木有一起的   21       0
评论
站长交流