实现一个Promise.retry( )

  /**
   * 实现 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);

你可能感兴趣的:(javascript)