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

Node.js18中Fetch调用CurseForge API的异步执行顺序问题

解决Node.js中fetch异步请求导致执行顺序异常的问题

问题核心是异步操作未被正确等待,forEach这类循环不会处理异步函数的等待逻辑,导致后续代码提前执行。以下是两种可靠的解决方式:

方式一:逐个串行请求(严格顺序输出)

适合需要严格按照模组ID顺序输出名称的场景,每个请求完成后再发起下一个:

const modIds = [123, 456, 789]; // 替换为你的模组ID列表
const API_KEY = '你的CurseForge API密钥';

// 封装单个模组名称的获取函数
async function getModName(modId) {
  const response = await fetch(`https://api.curseforge.com/v1/mods/${modId}`, {
    headers: { 'x-api-key': API_KEY }
  });
  if (!response.ok) {
    throw new Error(`请求模组${modId}失败: ${response.status}`);
  }
  const data = await response.json();
  return data.data.name;
}

// 主处理函数
async function processMods() {
  try {
    // 使用for...of循环逐个等待异步操作完成
    for (const id of modIds) {
      const name = await getModName(id);
      console.log(name);
    }
    // 所有请求完成后再输出提示
    console.log("download finished");
  } catch (err) {
    console.error('处理出错:', err);
  }
}

// 启动执行
processMods();

方式二:并行请求后统一输出(效率更高)

如果不需要严格的请求顺序,只是要等所有请求完成后再输出名称和提示,用Promise.all并行发起所有请求,效率更高:

const modIds = [123, 456, 789];
const API_KEY = '你的CurseForge API密钥';

async function getModName(modId) {
  const response = await fetch(`https://api.curseforge.com/v1/mods/${modId}`, {
    headers: { 'x-api-key': API_KEY }
  });
  if (!response.ok) {
    throw new Error(`请求模组${modId}失败: ${response.status}`);
  }
  const data = await response.json();
  return data.data.name;
}

async function processMods() {
  try {
    // 并行发起所有请求,等待全部完成
    const modNames = await Promise.all(modIds.map(id => getModName(id)));
    // 统一输出所有模组名称
    modNames.forEach(name => console.log(name));
    console.log("download finished");
  } catch (err) {
    console.error('处理出错:', err);
  }
}

processMods();

原代码出错原因

你之前的代码大概率使用了forEach循环调用异步的fetch函数——forEach不会等待异步函数执行完成,循环会直接走完,主线程随即执行后续的console.log("download finished"),而此时fetch请求还在后台处理,所以会先输出提示,后输出模组名称。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 19:25:28