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

调用同一服务获取不同Picklist数据时数组被合并的解决方法

问题:调用同一服务获取Picklist数据时结果互相合并

我尝试用同一服务获取两个不同Picklist的数据,单独调用每个接口都正常,但返回的数据会互相合并。打印countryPicklist和businessSectorPicklist时,结果都是两次调用的所有数据合并后的数组。请问如何避免数组被合并?

x.Component.ts

public countryPicklist: IPicklistCategories[] = [];
public businessSectorPicklist: IPicklistCategories[] = [];

ngOnInit(): void {
  this.CrmService.GetPicklistValues("contact", "country").subscribe({
    next: (data: IPicklistCategories[]) => {
      this.countryPicklist = data;
      console.log(data);
    }
  });
  this.CrmService.GetPicklistValues("contact", "type").subscribe({
    next: (businessSectorData: IPicklistCategories[]) => {
      this.businessSectorPicklist = businessSectorData;
      console.log(businessSectorData);
    }
  });
}

x.service.ts

picklistCategories: IPicklistCategories[] = [];
public GetPicklistValues(entity: string, fieldName: string): any {
  //returns metadata and converts it to array with label and value
  let endpoint = mysecretendpoint;
  return this.get<IPicklistResponse>(endpoint).pipe(
    map((res: IPicklistResponse) => {
      let options = res.GlobalOptionSet.Options;
      options.forEach((data: any) => {
        this.picklistCategories.push({
          "label": data.Label,
          "value": data.Value
        });
      });
      return this.picklistCategories;
    }))
}

解决方案

问题根源在服务类的picklistCategories变量上——它是服务类的全局成员变量,所有GetPicklistValues调用都会复用同一个数组,每次调用都往里面push新数据,导致两次请求的结果被累积合并。

只需要把数组改成局部变量,每次调用时创建新数组即可:

修改后的x.service.ts代码:

public GetPicklistValues(entity: string, fieldName: string): any {
  let endpoint = mysecretendpoint;
  return this.get<IPicklistResponse>(endpoint).pipe(
    map((res: IPicklistResponse) => {
      // 每次调用创建新的局部数组
      const picklistCategories: IPicklistCategories[] = [];
      const options = res.GlobalOptionSet.Options;
      options.forEach((data: any) => {
        picklistCategories.push({
          label: data.Label,
          value: data.Value
        });
      });
      return picklistCategories;
    }))
}

这样每次调用GetPicklistValues都会生成独立的数组,两个订阅会拿到各自对应的Picklist数据,不会再出现合并的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 16:48:57