angular - 在 forEach 有条件的内部承诺完成后解决一个承诺
问题描述
我有以下跨越数组的承诺。根据数组项的值,可能会进行另一个调用。如果没有,什么都没有。它最终解决了一个对象。但问题是现在它早早地解决了。如果汽车的状态已知,则返回的数字很好。如果需要动态检测,它不会等待状态确定:
getAggregatedData(obj: StorageUnit): Promise<any> {
let stat = {
inStoreCars: 0,
atWorkCars: 0
};
const vm: any = this;
return new Promise((resolve, reject) => {
obj.carsList.forEach(car => {
if (car.inStore) {
stat.inStoreCars++;
} else if (car.atWork) {
stat.atWorkCars++;
}
// unknown state. so check its state
else {
vm.carStateService
.getState(car)
.then(value => {
if (value == 1){
stat.inStoreCars++;
}else{
stat.atWorkCars++;
}
});
}
});
resolve(stat) // returning too early before getState() resolves
});
}
然后我通常用
getAggregatedData(car).then(stat=>{
console.log(stat)
});
解决方案
我有点需要更多信息,但在那些。拥有一个使一些异步内容同步的函数是一种反模式,因为事件循环是如何工作的。为什么你甚至需要承诺?如果您使用的是打字稿,为什么不异步等待。另一个反模式在同一个地方创建和执行承诺