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

如何改造Promise代码实现串行请求 解决高并发触发服务器限流

接口串行调用改造方案

针对触发服务端限流的场景,将原有基于Promise.all的全并发实现调整为“上一个请求完成后再发起下一个”的串行模式,从根源上规避短时间请求洪峰。

改造后完整代码

public async getProfits(data) {
  const processedList = [];
  // 按数组原有顺序逐条目发起串行请求
  for (const obj of data) {
    // 等待当前请求响应完成,才会执行下一轮循环
    const rawRes = await this.getProfit(obj.symbol);
    obj.stat = rawRes;
    processedList.push(obj);
  }
  // 完全保留原有排序、赋值逻辑
  this.data = this.dataService.ascArray(processedList, 'symbol');
}

实现注意事项

  • 逻辑一致性:改造后完全匹配原有代码的字段赋值规则、最终排序逻辑,不需要调整上层业务的取值规则
  • 调用兼容性:改造后的方法为async方法,返回值仍然是Promise,原有上层调用该方法的代码(不管是await调用还是.then链式调用)完全不需要修改
  • 执行特性:全程无并发请求,单时刻仅存在一个在途接口请求,不会触发服务端的短时间请求次数限流规则
  • 异常适配:默认实现中如果单条请求抛出错误,会直接中断后续所有请求;如果需要容错,可在循环内部补充try/catch捕获单请求异常,将失败条目以默认值存入结果列表后继续执行后续流程

如果全串行导致整体请求耗时过长,可后续调整为固定并发数的并发窗口模式(比如每次最多同时发起3个请求),但对于限流规则严格的服务端,全串行是最稳妥的初始方案。

内容的提问来源于stack exchange,提问作者Ellen Mina Kim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 23:15:04