关于javascript:实现一个Promiseretry

5次阅读

共计 500 个字符,预计需要花费 2 分钟才能阅读完成。

  /**
   * 实现 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.prototype.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);
正文完
 0