创建一个带有重试机制的请求函数,用于避免请求受限或失败时重新尝试请求。

发布时间 2023-10-12 11:52:04作者: 凿壁偷光,集思广益
/**
 * 创建一个带有重试机制的请求函数,用于避免请求受限或失败时重新尝试请求。
 * @param {function} func - 要执行的请求函数。
 * @param {number} maxCount - 最大重试次数,默认为 10。
 * @param {number} time - 重试间隔时间(毫秒),默认为 1500 毫秒。
 * @returns {object} 包含请求函数的对象。
 *
 * @example
 * import { retryRequest } from '@/utils/public';
 * // 使用 retryRequest 创建可重试的请求函数
 * const { request } = retryRequest(simulateFailedRequest, 5, 1000);
 * // 发起请求
 * const result = await request();
 */
export function retryRequest(func, reReq: { retry?: boolean; time?: number; maxCount?: number }) {
  let interval: any = null;
  let count: any = 1;
  const { time = 1500, maxCount = 10 } = reReq;
  const request = async (...args): Promise<any> => {
    return new Promise<void>((resolve, reject) => {
      clearInterval(interval);
      interval = setInterval(async () => {
        if (count < maxCount) {
          const result = await func(...args);
          if (result) {
            clearInterval(interval);
            resolve(result);
          } else {
            count++;
          }
        } else {
          clearInterval(interval);
          console.log('超过最大次数');
          reject();
        }
      }, time);
    });
  };

  return { request };
}