本文介绍: 当执行fn函数时,它将同时返回一个Promise.race。这个Promise.race会等待fn函数返回结果超时然后抛出一个错误。如果fn超时返回结果,则返回该结果;否则,如果超时,则retry函数将再次重试fn函数。这将尝试重试doSomething函数5次,在每次重试之间等待2秒,并且每次异步操作超时时间为8秒。如果doSomething函数在8秒内返回结果,结果将被打印控制台上;可以使用async/await和Promise.race实现一个指定超时时间异步函数重试机制

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

function delay(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

async function retry(fn, maxRetries = 3, delayMs = 1000, timeoutMs = 5000) {
  for (let i = 0; i < maxRetries; i++) {
    try {
      const result = await Promise.race([
        fn(),
        delay(timeoutMs).then(() => { throw new Error('Timeout'); })
      ]);
      return result;
    } catch (e) {
      if (i === maxRetries - 1) {
        throw e;
      } else {
        await delay(delayMs);
      }
    }
  }
}

这个retry函数接受3个参数

执行fn函数时,它将同时返回一个Promise.race。这个Promise.race会等待fn函数返回结果或超时然后抛出一个错误。如果fn在超时前返回结果,则返回该结果;否则,如果超时,则retry函数将再次重试fn函数。如果重试次数达到maxRetries,则最后一次错误将被抛出

使用示例

function doSomething() {
  return new Promise(resolve => setTimeout(() => resolve('done'), 4000));
}

retry(doSomething, 5, 2000, 8000)
  .then(result => console.log(result))
  .catch(error => console.error(error));

这将尝试重试doSomething函数5次,在每次重试之间等待2秒,并且每次异步操作的超时时间为8秒。如果doSomething函数在8秒内返回结果,结果将被打印控制台上;否则,将在5次重试后抛出一个错误

原文地址:https://blog.csdn.net/m0_73358221/article/details/134765252

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_35910.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注