JIT
calling apis sequentially with spinner and error handling
I need to call each api one by one this.spinner.show(this.DESIGN_CRITERIA_SPINNER); let lstObs = []; racks.forEach(async (rack, i) => { let url = `${this.backendUrl}/cpq/opportunity/08a00019f176d2d6/products`;; const options = { withCredentials: true }; let defaultPayload = { "aAmbientTemperature": 97, "aOffsetTemperature": 97, "aAirOverCoilTemperature": 0, "aRefrigerationType": "avRefrigerationTypeR744", "aElectricalType": "avElectricalType460", "aCondenserGasCoolerType": "avCondenserGasCoolerTypeAirCooled", "aCondenserGasCoolerBrand": "avCondenserGasCoolerBrandModine", "aRackLocation": "avRackLocationIndoor", "aRemoteOrIntegratedCondenser": "avRemoteOrIntegratedCondenserRemote", "aCompressorManufacturer": "avCompressorManufacturerBitzer", // "aMtTotalLoad": 200, // "aMtTemperature": 20, // "aLtTotalLoad": 72, // "aLtTemperature": -20, "aMinRequiredSpareCapacity": "avMinRequiredSpareCapacity0", "aUom": "avUomImperial" }; let pipe = new AggregatePipe(); let ltLoad = pipe.transform(rack.LTGroup.Loads, "total", "Load"); let ltEvap = pipe.transform(rack.LTGroup.Loads, "min", "Evap Temp"); let mtLoad = pipe.transform(rack.MTGroup.Loads, "total", "Load"); let mtEvap = pipe.transform(rack.MTGroup.Loads, "min", "Evap Temp"); ltLoad = (ltLoad === 0) ? 0 : (ltLoad / 10); mtLoad = (mtLoad === 0) ? 0 : (mtLoad / 10); let payload = { ...defaultPayload, "aMtTotalLoad": mtLoad, "aMtTemperature": mtEvap, "aLtTotalLoad": ltLoad, "aLtTemperature": ltEvap }; lstObs.push(this.http.post(url, payload, options).pipe(delay(500))); }); forkJoin(lstObs).subscribe({ next: (res) => { this.spinner.hide(this.DESIGN_CRITERIA_SPINNER); racks.forEach((x, i) => { let tempRack = JSON.parse(JSON.stringify(x)); tempRack.models = res[i]; this.racksModels.push(tempRack); }) }, error: (err) => { this.spinner.hide(this.DESIGN_CRITERIA_SPINNER); this.modal.dismiss(); }, complete:()=>{ this.spinner.hide(this.DESIGN_CRITERIA_SPINNER); } })
Updated files
v1