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

如何通过Axios获取状态变为ready的多请求响应?

批量任务状态轮询直至就绪的实现方案

你的需求是批量发起请求,等待每个任务的状态从processing变为ready后获取最终响应,核心是给每个任务添加轮询逻辑,直到满足状态条件为止。以下是优化后的可运行代码:

1. 封装单个任务的轮询函数

// 单个任务的轮询逻辑,直到status变为ready
const pollTaskStatus = async (taskId: string, interval = 1000, timeout = 60000) => {
  const url = `urlApi...${taskId}`; // 替换为你的实际API地址
  const startTime = Date.now();

  while (true) {
    // 超时判断,避免无限轮询
    if (Date.now() - startTime > timeout) {
      throw new Error(`任务 ${taskId} 轮询超时`);
    }

    try {
      const response = await axios.get(url);
      const { success, status } = response.data;

      if (success && status === 'ready') {
        return response.data; // 返回就绪状态的响应数据
      }
    } catch (error) {
      console.error(`轮询任务 ${taskId} 出错:`, error);
    }

    // 等待指定间隔后发起下一次请求
    await new Promise(resolve => setTimeout(resolve, interval));
  }
};

2. 批量处理所有任务的轮询

const statusOrder = async (data: { task_id: string }[]) => {
  // 为每个任务生成对应的轮询Promise
  const pollPromises = data.map(element => pollTaskStatus(element.task_id));

  try {
    // 等待所有任务都完成轮询(变为ready)
    const resultados = await Promise.all(pollPromises);
    console.log('所有任务就绪,结果:', resultados);
    return resultados;
  } catch (error) {
    console.error('轮询过程出错:', error);
    throw error; // 可根据业务需求决定是否抛出错误
  }
};

关键说明

  • 轮询配置:默认1秒轮询一次、超时时间60秒,可根据实际业务场景调整interval和timeout参数
  • 错误处理:单个任务请求失败时会打印错误并继续轮询;超时后会抛出错误,避免无限等待
  • 类型优化:替换了原代码中的any类型,使用明确的类型定义提升代码可维护性
  • 并发控制:如果任务数量较多,可引入并发限制库(如p-limit)控制同时发起的轮询请求数,避免给服务器造成过大压力

内容的提问来源于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 02:25:24