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

带Promise的fetch函数返回后,数组id字段全部变为0的问题排查

问题排查与解决方案

以下是几个最可能的原因及对应的排查/解决方法:

1. 返回后的数组被后续代码意外修改

数组属于引用类型,你返回的数组和后续代码操作的是同一份内存数据。如果在函数返回后,有其他逻辑遍历数组并将id重置为0,就会出现「打印时正确、返回后变0」的情况。

  • 排查验证:
    在GetResolutionsAsync函数的return语句前,给数组做深拷贝后再返回,比如:
    return JSON.parse(JSON.stringify(data));
    
    若返回值的id恢复正常,说明是后续代码修改了原数组。

2. TypeScript类型定义的类与实际数据不匹配

如果BaseReference是类而非接口,且类中默认将id初始化为0:

class BaseReference {
  id: number = 0;
  name: string = '';
}

通过fetch获取的是普通JSON对象,并非类实例。若后续代码有逻辑将这些对象转换为类实例(比如用class-transformer的plainToInstance),且转换时未正确读取原始id,就会被类的默认值覆盖为0。

  • 解决方法:
    • 若不需要类的实例方法,将BaseReference改为接口:
      interface BaseReference {
        id: number;
        name: string;
      }
      
    • 若必须用类,手动将JSON属性赋值给类实例:
      return data.map(item => Object.assign(new BaseReference(), item));
      

3. 响应解析时的隐式类型异常

极少数情况下,服务器返回的id是字符串类型(如"123"),但类型定义为number。若后续代码对id做了错误的类型转换(比如非预期的空值处理),可能导致id变为0。

  • 排查验证:
    在response.json()后打印typeof data[0].id,确认实际类型。如果是字符串,手动转换为数字:
    return data.map(item => ({
      id: parseInt(item.id, 10),
      name: item.name
    }));
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 16:32:11