# 实现Promise.retry()

成功后 resolve 结果,失败后重试,尝试超过一定次数才真正的 reject

Promise.retry = function (promiseFn, times = 3) {
  return new Promise(async (resolve, reject) => {
    while (times--) {
      try {
        var ret = await promiseFn();
        resolve(ret);
        break;
      } catch (error) {
        // 如果出错了,但是还有机会,可以重试
        if (!times) reject(error);
      }
    }
  });
};

function getRandom() {
  const n = Math.random();
  return new Promise((resolve, reject) => {
    setTimeout(() => n > 0.9 ? resolve(n) : reject(n), 1000);
  });
}

Promise.retry(getRandom);