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

Node.js循环调用API引发内存过载问题求助

解决API循环调用导致的内存暴涨问题

哇,你遇到的这个内存暴涨问题其实是典型的同步循环+异步请求搭配错误导致的,咱们先拆解问题根源,再给你修复后的代码方案:

问题根源分析

  1. 同步while循环疯狂发起异步请求
    你的loop函数里用了while (infinity < 1),这个条件永远为true(因为infinity初始是0,全程没修改)。而且api_call是异步函数(依赖axios的Promise),同步while根本不会等请求完成,会瞬间发起成千上万的API请求——每个请求都会占用内存,直接把内存撑爆,连垃圾回收(GC)都赶不上清理,最后就报了内存分配失败的错误。

  2. api_call函数没有返回有效结果
    你现在的api_call里调用了axios.get,但没有return这个Promise,所以函数默认返回undefined。后面if (api_call(variable) > true)完全是无效判断(undefined > true永远是false),循环永远不会break,只会一直疯跑。

  3. 模板字符串语法错误
    let url = 'http://api.site.com/api.php?i=${api[item].appid}';这里用了单引号,模板字符串必须用反引号`,不然${}不会被解析,请求的url里还是原样的变量占位符,请求本身就不对。

修复后的代码方案

我们用async/await实现异步循环,确保每次请求完成后再发起下一次,不会疯狂堆积请求:

const axios = require('axios');
const api = require('./api.json');

// 修复API调用函数:返回Promise,正确处理请求和结果
async function apiCall(item) {
  try {
    // 用反引号解析模板字符串,正确拼接url
    const url = `http://api.site.com/api.php?i=${api[item].appid}`;
    const response = await axios.get(url);
    const id = response.data.id;
    // 返回判断结果:是否达到目标值
    return id > 10;
  } catch (error) {
    console.error('API请求出错:', error);
    // 请求失败时返回false,也可以根据需求添加重试逻辑
    return false;
  }
}

// 异步监控循环:每次等待请求完成后再判断
async function monitorItem(variable) {
  while (true) {
    const isTargetReached = await apiCall(variable);
    if (isTargetReached) {
      console.log('Found!');
      break;
    }
    console.log('-');
    // 可选:添加延迟,避免太频繁请求被API限流
    await new Promise(resolve => setTimeout(resolve, 1000));
  }
}

// 调用监控函数,传入你要监控的item键名
monitorItem('your-item-key');

关键改进点

  • 把api_call改成async函数,用await等待axios请求完成,确保返回有效Promise结果。
  • 用异步while (true)循环配合await,保证每次API请求完成后再进行下一次循环,不会瞬间发起大量请求占用内存。
  • 修复了模板字符串的语法错误,确保url正确拼接。
  • 增加了可选的请求延迟,避免过于频繁请求导致被API服务器限流。
  • 完善了错误处理,请求出错时会打印错误信息,不会让程序直接崩溃。

额外建议

  • 避免用infinity这种容易混淆的变量名,用语义化命名更易读。
  • 可以增加最大重试次数,防止API一直返回错误或目标值永远达不到时的无限循环。
  • 如果需要监控多个item,可控制并发数(比如用p-limit库),避免同时发起太多请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:16:58