我正在处理两个 Promise,并对其进行了简化,以使事情更容易查看。
注意 Cars 和 ServiceRecords 是 2 个不同的表。
我希望我的最终数据集看起来像这样:
car = {
make: Honda,
color:red,
id:12,
serviceRecords:[
{type: oil change,
customerHappy: Yes,
id:1
carid:12
},
{type: oil change,
customerHappy: no
id:2
carid:12
}
]
}
第一个承诺
getCar() {
return new Promise((resolve, reject) => {
const id = this.route.snapshot.paramMap.get('id');
// find the car we want
const car = Xrm.WebApi.retrieveRecord('car', `${id}`);
if (car ) {
resolve(car ); // send the car
} else {
reject(Error('No Car Found!'));
}
});
}
第二个承诺
hydrateCar(car) {
return new Promise((resolve, reject) => {
const services:any = Xrm.WebApi.retrieveMultipleRecords('servicerecord', `?$filter=carid eq ${car.id}`).then((results) => {
for (let i = 0; i < results.entities.length; i++) {
const result = results.entities[i];
car.serviceRecords=result;
}
resolve(car);
});
});
}
调用函数
this.getCar().then((car) => {
console.log('car', car);
return this.hydrateCar(car);
})
.catch((error) => {
console.log(error);
});
this.loading = false;
}
我得到的只是服务记录的最后一次迭代。我希望关键的 car.ServiceRecords 是所有记录的数组。
hydrateCar(car) {
return new Promise((resolve, reject) => {
Xrm.WebApi.retrieveMultipleRecords('servicerecord', `?$filter=carid eq ${car.id}`).then((results) => {
const serviceRecords = [];
for (let i = 0; i < results.entities.length; i++) {
const result = results.entities[i];
serviceRecords.push(result);
}
car.serviceRecords = serviceRecords;
resolve(car);
});
});
}
您面临的问题是您在 HydroCar 函数的循环的每次迭代中覆盖了 car.serviceRecords 属性。相反,您应该将服务记录累积到一个数组中。