Создайте promise.all для каждой модели обрезки пользователя, включив в список обещаний ваши асинхронные запросы.
Когда вы решите внутренние, верните один объект расчета.
Когда вы решите все из них, получите список расчетов:
Ваш код должен выглядеть примерно так:
private calculate() {
const promises: Promise<any>[] = [];
for (let i = 0; i < this.userCropTxModels.length; i++) {
let userCropTxModel = this.userCropTxModels[i];
promises.push(Promise.all([
this.userCropProvider.getGrossMarketableByCropId(userCropTxModel.cropId),
this.userCropProvider.getAPHMarketableByCropId(userCropTxModel.cropId),
this.userContractProvider.getTotalContractedBushelsByCropId(userCropTxModel.cropId),
this.userContractProvider.getTotalContractDollarAmountByCropId(userCropTxModel.cropId)
]).then(data => ({
cropName: 'Corn',
grossMarketable: data[0],
amountSold: data[1],
totalContractDollarAmount: data[2]
})));
}
Promise.all(promises).then(calculations => console.log(calculations));
}
EDIT
Немного рефакторинга. Я не знаю, работает ли это, я просто пишу код, даже не пытаясь, но немного чище:
private calculate() {
const promises: Promise<any>[] = this.userCropTxModels.map(userCropModel => Promise.all([
this.userCropProvider.getGrossMarketableByCropId(userCropModel.cropId),
this.userCropProvider.getAPHMarketableByCropId(userCropModel.cropId),
this.userContractProvider.getTotalContractedBushelsByCropId(userCropModel.cropId),
this.userContractProvider.getTotalContractDollarAmountByCropId(userCropModel.cropId)
]).then(data => ({
cropName: 'Corn',
grossMarketable: data[0],
amountSold: data[1],
totalContractDollarAmount: data[2]
})));
Promise.all(promises).then(calculations => console.log(calculations));
}
Вы даже можете использовать async / await, если хотите написать код синхронизации / стиля