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

如何在axios迭代请求中每轮返回完成百分比与对应获取数据数组

实现方案

核心改造逻辑

  • 将请求函数作为入参传入迭代逻辑,消除硬编码耦合,可灵活切换不同资源的请求方法
  • 增加额外参数透传能力,适配需要传token、自定义头的请求场景
  • 修复原有递归逻辑中请求参数写死、回调调用时机错误的问题

通用迭代函数实现

async function batchFetch(start, finish, requestFn, callback, ...extraRequestArgs) {
  if (start >= finish) {
    return;
  }
  try {
    // 透传当前序号+额外参数到请求函数
    const response = await requestFn(start, ...extraRequestArgs);
    const percentage = Math.round((start / finish) * 100);
    // 触发回调返回进度和本次拉取数据
    callback({ percentage, pageContent: response.data });
    // 递归执行下一次请求
    await batchFetch(start + 1, finish, requestFn, callback, ...extraRequestArgs);
  } catch (error) {
    console.error("请求出错:", error);
  }
}

调用示例

拉取人物数据(带token)

const userToken = '你的接口鉴权token';
// 传入请求函数、回调,最后透传token参数
batchFetch(1, 3, requestCharacters, PrintObjectsFromFetch, userToken);

拉取行星数据(无额外参数)

batchFetch(1, 3, requestPlanets, PrintObjectsFromFetch);

函数式风格进阶封装

如果需要复用固定的请求和回调配置,可以用柯里化做进一步封装:

// 生成固定配置的拉取函数
const createResourceFetcher = (requestFn, callback) => 
  (start, finish, ...extraArgs) => batchFetch(start, finish, requestFn, callback, ...extraArgs);

// 封装人物拉取方法
const fetchCharacters = createResourceFetcher(requestCharacters, PrintObjectsFromFetch);
// 直接调用,仅需传范围和token
fetchCharacters(1, 3, userToken);

// 封装行星拉取方法
const fetchPlanets = createResourceFetcher(requestPlanets, PrintObjectsFromFetch);
fetchPlanets(1, 3);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:24:04