You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用AXIOS GET重复调用接口直至返回status为ready?

实现AXIOS重复调用接口直到状态变为ready

可以通过异步递归+延迟重试的方式实现需求,同时要考虑请求失败、无限循环的问题,下面是具体实现:

基础实现(递归重试)

async function waitForReadyStatus() {
  const response = await axios.get('myUrlApi...');
  const data = response.data;

  // 如果状态还是processing,延迟后递归调用
  if (data.success && data.status === 'processing') {
    // 延迟1秒后重试,可根据实际情况调整间隔
    await new Promise(resolve => setTimeout(resolve, 1000));
    return waitForReadyStatus();
  }

  // 状态变为ready或者请求失败时返回结果
  return data;
}

// 使用示例
waitForReadyStatus()
  .then(result => {
    console.log('最终结果:', result);
  })
  .catch(error => {
    console.error('请求出错:', error);
  });

增强版(带超时和重试次数限制)

为了避免无限等待或频繁请求给服务器造成压力,建议添加超时时间和最大重试次数:

async function waitForReadyStatus(maxRetries = 30, retryInterval = 1000) {
  let retries = 0;

  while (retries < maxRetries) {
    try {
      const response = await axios.get('myUrlApi...');
      const data = response.data;

      if (data.success && data.status === 'ready') {
        return data; // 状态就绪,返回结果
      } else if (data.success && data.status === 'processing') {
        // 状态仍在处理,延迟后重试
        await new Promise(resolve => setTimeout(resolve, retryInterval));
        retries++;
      } else {
        // 请求成功但状态异常,直接抛出错误
        throw new Error('接口返回异常状态');
      }
    } catch (error) {
      // 请求失败,延迟后重试
      await new Promise(resolve => setTimeout(resolve, retryInterval));
      retries++;
      if (retries >= maxRetries) {
        throw new Error(`超过最大重试次数(${maxRetries}次),请求失败`);
      }
    }
  }
}

// 使用示例
waitForReadyStatus(20, 1500) // 最多重试20次,每次间隔1.5秒
  .then(result => {
    console.log('最终结果:', result);
  })
  .catch(error => {
    console.error('获取就绪状态失败:', error);
  });

关键注意点

  • 合理设置重试间隔:不要过于频繁调用接口,避免触发服务器限流或增加服务器负载,建议根据接口处理速度设置1-5秒的间隔。
  • 添加重试次数/超时限制:防止因接口一直返回processing导致无限循环,设置最大重试次数或总超时时间。
  • 处理异常情况:要捕获请求失败(比如网络错误、接口返回5xx/4xx)的情况,避免程序崩溃。

内容的提问来源于stack exchange,提问作者Paco Zevallos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 04:40:29