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

捕获错误后如何重试异步生成器并继续迭代流程?

问题

现有一个用于无限处理数据的异步生成器,代码如下:

// infinite data processing 
async function* createDataProcessingIterator() {
  try {
    while (true) {
      const { data: { items }} = await axios.get(API_URL);
      const processedData = processData(items);

      yield processedData;
    }
  } catch (err) {
    console.log('Error while iterating: ', err);
  }
}

const dataProcessingIterator = createDataProcessingIterator();

for await (const data of dataProcessingIterator) {
  // manage processed data
}

当前代码运行正常,但一旦捕获到API服务器错误这类异常,整个迭代器会直接停止,无法继续后续的迭代流程。请问如何修改才能在捕获错误后继续迭代?

解决方案

核心是把错误捕获的范围缩小到单次请求处理周期,而不是包裹整个无限循环。这样单次请求出错后,只会跳过当前这一轮的处理,循环会继续执行下一次请求,不会终止生成器。

修改后的代码如下:

// infinite data processing 
async function* createDataProcessingIterator() {
  while (true) {
    try {
      const { data: { items }} = await axios.get(API_URL);
      const processedData = processData(items);

      yield processedData;
    } catch (err) {
      console.log('Error during current request: ', err);
      // 可选:添加延迟后重试,避免频繁请求出错的API
      await new Promise(resolve => setTimeout(resolve, 3000));
    }
  }
}

const dataProcessingIterator = createDataProcessingIterator();

for await (const data of dataProcessingIterator) {
  // manage processed data
}

关键说明

  • try/catch被移到了while(true)循环内部,每次循环都会重新执行try块里的请求逻辑
  • 当某次请求出错时,会进入catch块打印错误,之后循环会自动回到下一轮迭代
  • 可选添加延迟重试:在catch里用setTimeout加几秒延迟,避免短时间内频繁请求故障API,减少服务器压力和无效请求

额外建议

如果需要更健壮的处理,可以:

  • 记录错误次数,当错误达到一定阈值时临时停止或触发告警
  • 根据错误类型做不同处理:比如网络超时重试,404这类永久错误直接跳过当前请求

内容的提问来源于stack exchange,提问作者James Jr.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:50:27