JS:实现指数避退算法重式机制

118 阅读1分钟

延迟执行函数

/**
 * 延迟执行函数
 * @param {Number} delayms 
 * @returns 
 */
export const sleep = (delayms) => {
  return new Promise((resolve, reject) => {
    setTimeout(resolve, delayms);
  })
}

指数避退重试函数

/**
 * 指数避退重试函数
 * @param {Number} retryCount 
 * @param {Function} func 
 * @returns 
 */
export async function RetryInvoke(retryCount, func) {
  if (retryCount <= 0) retryCount = 1;
  let nextDelay = 1000;
  for (let i = 0; i != retryCount; ++i) {
    try {
      return await sleep(nextDelay).then(func);
    } catch (error) {
      console.log(error);
    }
    nextDelay = nextDelay * 2;
  }
  // 最后再执行一次
  return await sleep(nextDelay).then(func);
}