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

好的,这里提供一种可指定超时时间的异步函数重试机制的实现方式:

async function retryWithTimeout(asyncFn, maxRetries = 3, timeout = 1000) {
  let retries = 0;
  while (retries < maxRetries) {
    try {
      const result = await Promise.race([asyncFn(), timeoutPromise(timeout)]);
      return result;
    } catch (err) {
      retries++;
      if (retries === maxRetries) {
        throw new Error(`Retry failed after ${maxRetries} attempts`);
      }
    }
  }
}

function timeoutPromise(ms) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      reject(new Error(`Timed out after ${ms}ms`));
    }, ms);
  });
}

这个函数接受三个参数:一个异步函数 asyncFn,最大重试次数 maxRetries 和超时时间 timeout(单位为毫秒)。它会在 asyncFn 执行失败时自动重试(最多重试 maxRetries 次),并且在每次重试之前会等待 timeout 毫秒。

调用这个函数可以像这样:

async function myAsyncFunction() {
  // do something asynchronous here...
}

try {
  const result = await retryWithTimeout(myAsyncFunction, 3, 5000);
  console.log(result);
} catch (err) {
  console.error(err);
}

这将会尝试最多执行 myAsyncFunction 三次,每次等待 5 秒钟,并且在所有尝试都失败后抛出一个错误。如果 myAsyncFunction 成功返回结果,那么结果将会被打印到控制台上。

你也可以省略 maxRetriestimeout 参数。默认情况下,maxRetries 为 3 次,timeout 为 1 秒。

猜你喜欢

转载自blog.csdn.net/song19990524/article/details/134746480