编辑代码

Promise.retry = function (fn, times, delay) {
  let leftTimes = times
  return new Promise((resolve, reject) => {
    async function foo() {
      try {
        const res = await fn()
        resolve(res)
      } catch (error) {
        if (--leftTimes) {
          console.log(`还有${leftTimes}次机会`)
          setTimeout(() => {
            foo()
          }, delay)
        } else {
          reject(error)
        }
      }
    }
    foo()
  })
}

function getData() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      const random = Math.floor(Math.random() * 10)
      if (random < 0) {
        resolve(random)
      } else {
        reject(random)
      }
    }, 300)
  })
}

Promise.retry(getData, 5, 700)
  .then(r => {
    console.log('成功,结果是', r)
  })
  .catch(_err => {
    console.log('全部执行失败')
  })