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

Node.js使用Lodash批量异步POST请求的限流方案咨询

处理API限流:两种异步请求方案的实现

刚好之前碰到过一模一样的API限流问题,结合你提到的两个思路,给你具体的代码实现和优缺点分析,都是基于Lodash和异步请求的场景:

方案1:逐请求添加100ms延迟(串行处理)

这是最直接的方案,严格遵守API每0.1秒最多1次请求的限制,每次请求完成后等待100ms再发送下一个。因为Lodash的普通_.forEach是同步遍历,没法直接结合异步操作,所以我们用for...of循环或者Lodash的_.mapSeries来实现串行异步处理:

const _ = require('lodash');
const axios = require('axios'); // 这里用axios举例,你可以换成自己的请求库

// 封装延迟函数
const wait = (ms) => new Promise(resolve => setTimeout(resolve, ms));

async function sendRequestsWithDelay(entries) {
  // 遍历entries映射,这里用for...of更直观,也可以用_.mapSeries
  for (const [entryKey, requestPayload] of Object.entries(entries)) {
    try {
      // 发送POST请求
      const response = await axios.post('https://your-target-api.com/endpoint', requestPayload);
      console.log(`✅ 条目 ${entryKey} 请求成功:`, response.data);
    } catch (err) {
      console.error(`❌ 条目 ${entryKey} 请求失败:`, err.message);
    }
    // 等待100ms再发下一个请求
    await wait(100);
  }
}

// 调用函数,传入你的entries映射
sendRequestsWithDelay(yourEntriesMap);

优点:实现简单,逻辑清晰,完全不会触发API限流;缺点:处理100条数据需要10秒(100*100ms),耗时固定,适合数据量不大的场景。

方案2:分批处理(带重试/批量控制)

如果希望更灵活(比如某批请求失败后可以单独重试),可以把请求分成若干批次(这里因为限流严格,每批只能放1个请求,当然如果API规则调整,也可以改成每批N个),用Lodash的_.chunk来拆分,再串行处理每一批:

const _ = require('lodash');
const axios = require('axios');

const wait = (ms) => new Promise(resolve => setTimeout(resolve, ms));

async function sendRequestsInBatches(entries) {
  // 把entries转成数组,再拆分成每批1个的小批次
  const batches = _.chunk(Object.entries(entries), 1);

  for (const batch of batches) {
    const [entryKey, requestPayload] = batch[0];
    try {
      const response = await axios.post('https://your-target-api.com/endpoint', requestPayload);
      console.log(`✅ 批次 ${entryKey} 请求成功:`, response.data);
    } catch (err) {
      console.error(`❌ 批次 ${entryKey} 请求失败,稍后重试...`);
      // 这里可以加重试逻辑,比如重新加入批次队列
      batches.push(batch);
      // 重试前延长一点等待时间,避免重复触发限流
      await wait(500);
    }
    // 批次之间等待100ms
    await wait(100);
  }
}

sendRequestsInBatches(yourEntriesMap);

优点:扩展性强,方便添加重试、日志统计等逻辑;缺点:比方案1多了一些代码复杂度,不过对于需要健壮性的场景很实用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:42:21