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

如何让try/catch中的循环遇404错误仍继续发起请求不中断?

解决方案

问题核心在于你把整个循环放在了外层try/catch中,只要单个请求抛出错误(比如404这类非2xx状态码,axios默认会将其视为错误),就会直接触发外层catch导致循环终止。要让循环继续执行,需要为每个请求单独处理错误,或者调整axios对错误状态码的判定逻辑。

方式一:每个请求单独捕获错误

把try/catch移到循环内部,这样单个请求的错误只会被当前迭代的catch处理,不会影响后续循环:

let array = [];

for (let i = 0; i < postcodes.length; i++) {
  try {
    const companyHouseData = await axios.get(
      `https://api.company-information.service.gov.uk/advanced-search/companies?location=${postcodes[i]}`,
      { auth }
    );
    
    // 仅保留2xx范围内的成功响应
    if (companyHouseData.status >= 200 && companyHouseData.status < 300) {
      array.push(companyHouseData);
    }
  } catch (err) {
    // 记录错误信息,也可以针对不同错误做区分处理
    console.log(`请求postcode ${postcodes[i]} 失败:`, err.message);
    if (err.response?.status === 404) {
      console.log(`postcode ${postcodes[i]} 未找到相关数据`);
    }
  }
}

方式二:调整axios的错误状态码判定

如果404属于业务上可接受的情况,不想让它触发错误,可以通过validateStatus配置,指定哪些状态码视为“成功响应”:

let array = [];

for (let i = 0; i < postcodes.length; i++) {
  const companyHouseData = await axios.get(
    `https://api.company-information.service.gov.uk/advanced-search/companies?location=${postcodes[i]}`,
    { 
      auth,
      // 让2xx和404都被视为成功响应,不抛出错误
      validateStatus: (status) => {
        return status >= 200 && status < 300 || status === 404;
      }
    }
  );

  // 根据状态码决定是否存入数组
  if (companyHouseData.status >= 200 && companyHouseData.status < 300) {
    array.push(companyHouseData);
  } else if (companyHouseData.status === 404) {
    console.log(`postcode ${postcodes[i]} 未找到数据`);
  }
}

如果需要处理其他网络错误(比如连接超时、5xx服务器错误),可以在这个基础上再给循环套一层try/catch。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 08:24:53