调用同一服务获取不同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
相关产品推荐
相关产品推荐

