js实现一个可指定超时时间的异步函数重试机制

可以使用Promise和async/await配合实现一个可指定超时时间的异步函数重试机制。

首先,定义一个retry函数,该函数包含一个异步函数fn和一个最大重试次数maxRetry以及一个超时时间timeout。retry函数先执行一次fn,如果执行成功则直接返回结果,如果执行失败则进行重试,直到重试次数达到maxRetry或者超时时间到达timeout。如果都没有成功,则抛出错误。

代码如下:

function retry(fn, maxRetry, timeout) {
  return new Promise(async (resolve, reject) => {
    let retryCount = 0;
    let timer;

    const run = async () => {
      try {
        const result = await fn();
        resolve(result);
      } catch (err) {
        if (retryCount < maxRetry) {
          retryCount++;
          clearTimeout(timer);
          timer = setTimeout(run, timeout);
        } else {
          reject(err);
        }
      }
    };

    timer = setTimeout(run, timeout);
  });
}

使用时,只需要定义一个异步函数,然后调用retry函数即可。

示例:

async function fetchData() {
  const result = await retry(fetchDataFn, 3, 1000);
  console.log(result);
}

async function fetchDataFn() {
  const response = await fetch('https://jsonplaceholder.typicode.com/todos/1');
  if (!response.ok) {
    throw new Error('Failed to fetch data');
  }
  return response.json();
}

fetchData();

上面的代码中,fetchData函数中调用了retry函数,重试的最大次数是3次,超时时间为1000ms。retry函数中执行了fetchDataFn异步函数,如果执行失败则进行重试,直到达到最大重试次数或者超时时间。如果执行成功,返回结果并打印到控制台。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值