前端面试题(伪代码):一个请求,10秒内可重试3次,3次都失败抛出异常

思路

1、通过new Promise处理请求的成功和失败,成功则给出响应结果,10秒内3次都失败则抛出异常
2、两种方式:a. 每次重试前获取当前时间戳,减去初始时间,判断是否小于10;b. 通过setInterval,初始10,每秒减1判断是否小于10。
3、记录最大可重试次数,每次重试减1
4、当倒计时10秒结束或者重试3次机会用完,还没有成功,则抛出异常

      function fetchData(url) {
        return fetch(url).catch(function (e) {
          throw e
        })
      }
      
      function retry(url, times, second) {
        return new Promise(function (resolve, reject) {
          let initTimestamp  = Date.now()
          function doRequest() {
            fetchData(url)
              .then(function (response) {
                resolve(response)
              })
              .catch(function (error) {
                let nowTimestamp = (Date.now() - initTimestamp ) / 1000
                times--
                console.log(`重试第${3 - times}次`)
                console.log(`倒计时第${nowTimestamp}秒`)
                if (times > 0 && nowTimestamp < second) {
                  doRequest()
                } else {
                  reject(error)
                }
              })
          }
          doRequest()
        })
      }

      retry("https://example.com/data'", 3, 10)
        .then(function (response) {
          console.log(response)
        })
        .catch(function (error) {
          console.error(error)
        })
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。