界说 retryAdapterEnhancer 函数

为了让用户能够更灵活地控制请求重试的功能,我们定义了一个 retryAdapterEnhancer函数,该函数支持两个参数: adapter:预增强的 Axios 适配器对象; options:缓存配置对象,该对象支持 2 个属性,分别用于配置不同的功能: times:全局设置请求重试的次

为了让用户能够更灵活地控制请求重试的功能,我们定义了一个 retryAdapterEnhancer函数,该函数支持两个参数:

adapter:预增强的 Axios 适配器对象;

options:缓存配置对象,该对象支持 2 个属性,分别用于配置不同的功能:

times:全局设置请求重试的次数;

delay:全局设置请求延迟的时间,单位是 ms。

了解完 retryAdapterEnhancer 函数的参数之后,我们来看一下该函数的具体实现:

function retryAdapterEnhancer(adapter, options) { 

  const { times = 0, delay = 300 } = options; 

 

  return async (config) => { 

    const { retryTimes = times, retryDelay = delay } = config; 

    let __retryCount = 0; 

    const request = async () => { 

      try { 

        return await adapter(config); 

      } catch (err) { 

        // 判断是否进行重试 

        if (!retryTimes || __retryCount >= retryTimes) { 

          return Promise.reject(err); 

        } 

        __retryCount++; // 增加重试次数 

        // 延时处理 

        const delay = new Promise((resolve) => { 

          setTimeout(() => { 

            resolve(); 

          }, retryDelay); 

         }); 

         // 重新发起请求 

         return delay.then(() => { 

           return request(); 

         }); 

        } 

      }; 

   return request(); 

  }; 

关于作者: dawei

【声明】:石家庄站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

为您推荐