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

使用recursive array.push处理Google Shopping分类路径时堆内存溢出问题

问题根因

死循环的核心原因是你在while循环中只声明了nextRest变量,却没有将它赋值给循环判断用的rest变量,导致rest永远为初始拆分得到的非空值,循环永不终止,最终触发内存溢出。

优化解决方案

完全不需要逐次拆分路径,直接一次性拆分所有片段再做映射即可,代码更简洁且完全避免死循环风险:

export interface GPartialCategory {
  id: number;
  // 修正原类型定义:原写法是固定长度为1的元组,不符合变长数组需求
  path: Array<{
    counter: number;
    partialPath: string;
  }>;
}

@Injectable()
export class CategoryService {

  constructor() { }

  async getAllGoogleCategories(): Promise<GPartialCategory[]> {
    const repo = getRepository(GCategoryEntity, 'default');
    const allCategories = await repo.find({ order: { path: 'ASC' } });
    return allCategories.map(category => this.parseCategoryPath(category));
  }

  // 原方法名无实际含义(没有递归逻辑),重命名更清晰
  private parseCategoryPath(category: GCategoryDto): GPartialCategory {
    // 一次性拆分所有路径片段
    const pathFragments = category.path.split(' &gt; ');
    // 直接映射为目标格式,用原生索引做counter不需要手动维护
    const parsedPath = pathFragments.map((fragment, index) => ({
      counter: index,
      partialPath: fragment
    }));
    return {
      id: category.id,
      path: parsedPath
    };
  }
}

如果你要保留原有逐次拆分的写法

只需要在while循环内新增一行rest = nextRest;即可修复死循环,但还是更推荐上面的实现,可维护性和性能都更优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:24:02