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

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

可以使用async/await和Promise.race来实现一个可指定超时时间的异步函数重试机制,具体代码如下:

async function retryWithTimeout(fn, maxAttempts, delay, timeout) {
  let attempt = 0;
  while (attempt < maxAttempts) {
    try {
      const result = await Promise.race([fn(), timeoutPromise(timeout)]);
      return result;
    } catch (error) {
      console.error(`Attempt #${attempt + 1} failed with error: ${error.message}`);
      attempt++;
      if (attempt === maxAttempts) {
        throw error;
      }
      await delayPromise(delay);
    }
  }
}
function timeoutPromise(timeout) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      reject(new Error('Timeout'));
    }, timeout);
  });
}
function delayPromise(delay) {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve();
    }, delay);
  });
}

使用时,传入一个需要重试的异步函数fn、最大重试次数maxAttempts、每次重试的延迟时间delay和超时时间timeout。其中timeoutPromise和delayPromise分别返回一个设置了超时和延迟的Promise,retryWithTimeout函数在每次重试时等待delayPromise返回的Promise,如果fn在timeout时间内未返回结果,则返回timeoutPromise返回的Promise。重试次数达到maxAttempts时,抛出错误。


目录
相关文章
|
20天前
|
前端开发 JavaScript UED
深入理解 JavaScript 同步和异步,让网页灵动起来!
深入理解 JavaScript 同步和异步,让网页灵动起来!
|
20天前
|
JavaScript 前端开发
JavaScript 闭包:让你更深入了解函数和作用域
JavaScript 闭包:让你更深入了解函数和作用域
|
3天前
|
前端开发 JavaScript 开发者
JavaScript异步编程艺术:深入浅出回调函数与异步挑战【含代码示例】
本文深入解析JavaScript异步编程,重点探讨回调函数和异步挑战。在单线程的JavaScript中,异步编程至关重要,回调函数是其基础。然而,回调地狱问题催生了Promise和async/await的出现。文章提供代码示例展示Promise和async/await的使用,并分享异步编程最佳实践,包括错误处理、资源管理和性能优化。遇到问题时,建议通过明确异步流程、逐步调试和异常捕获来解决。最后,文章强调异步编程的未来发展,鼓励开发者掌握最新工具并探讨更高效的异步解决方案。
13 2
|
6天前
|
JavaScript 前端开发
js中改变this指向、动态指定函数 this 值的方法
js中改变this指向、动态指定函数 this 值的方法
|
12天前
|
JavaScript 前端开发 Java
javascript是弱类型语言,一个函数参数可以接收不同类型的变量作为它的该参数
javascript是弱类型语言,一个函数参数可以接收不同类型的变量作为它的该参数
21 0
|
16天前
|
前端开发 JavaScript
前端 JS 经典:函数管道
前端 JS 经典:函数管道
5 0
|
20天前
|
JavaScript 前端开发
深入理解Vue.js中的nextTick:实现异步更新的奥秘
深入理解Vue.js中的nextTick:实现异步更新的奥秘
|
20天前
|
JavaScript 前端开发 网络架构
函数柯里化:JavaScript中的高级技巧
函数柯里化:JavaScript中的高级技巧
|
20天前
|
JavaScript 前端开发
JavaScript的`apply`方法:函数的“应用”与“调用”
JavaScript的`apply`方法:函数的“应用”与“调用”
|
20天前
|
JavaScript 前端开发
JavaScript的`bind`方法:函数的“复制”与“定制”
JavaScript的`bind`方法:函数的“复制”与“定制”