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

React Native中如何在循环调用API时每次请求后等待5秒?

解决API请求频率限制问题

你的问题核心在于forEach循环对异步函数的处理逻辑——forEach不会等待内部的异步操作执行完成,导致所有sleep(5000)几乎同时开始计时,最终API请求还是扎堆发送,触发了频率限制。

修复方案:改用for...of控制异步流程

通过扁平化数据结构+for...of循环,确保每次请求间隔5秒再发起下一个:

function Overview() {
  function sleep(ms) {
    return new Promise((resolve) => setTimeout(resolve, ms));
  }

  async function fetchETFData(symbol) {
    try {
      const response = await fetch(`URL_API${symbol}`);
      const testData = await response.json();
      console.log(testData);
    } catch (error) {
      console.error(error);
    }
  }

  async function userData() {
    try {
      const response = await fetch("URL_Database");
      const userDataFetch = await response.json();

      // 先把所有需要请求的symbol整理到一维数组
      const allSymbols = [];
      for (const key in userDataFetch) {
        userDataFetch[key].forEach(element => {
          allSymbols.push(element.symbol);
        });
      }

      // 用for...of逐个发起请求,保证间隔时间
      for (let i = 0; i < allSymbols.length; i++) {
        const symbol = allSymbols[i];
        await fetchETFData(symbol);
        // 最后一个请求无需额外等待
        if (i !== allSymbols.length - 1) {
          await sleep(5000);
        }
      }
    } catch (error) {
      console.error(error);
    }
  }

  userData();

  return (
    <View> {/* React Native需用View替代div */}
      <Button
        onPress={ShareOfPositions}
        title="Calculate Shares"
        color="#841584"
        accessibilityLabel="Learn more about this purple button"
      />
    </View>
  );
}

关键改动说明:

  • 扁平化数据:把嵌套结构中的symbol提取到一维数组,简化异步遍历逻辑
  • for...of循环:会等待内部异步操作完成后再进入下一次迭代,严格保证请求间隔
  • 优化等待逻辑:仅在请求之间添加延迟,最后一次请求结束后无需多余等待
  • 适配React Native:将div替换为View,符合RN组件规范

如果需要给用户反馈加载状态,可以在循环过程中更新组件状态,显示当前请求进度或加载提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:20:45