Я бы предположил, что это потому, что iCostCenter
заполняется внутри вашей подписки, и populateHeaderDet()
вызывается до того, как ответ возвращается от getAllCostCenters()
.
Попробуйте позвонить populateHeaderDet()
после того, как вы назначите iCostCenter вместо
ngOnInit() {
this.getAllCostCenetrs();
}
getAllCostCenetrs() {
this._appParams.getAllCostCenters().subscribe(
data => {
this.iCostCenter = data.result;
this.populateHeaderDet();
},
error => 'GetAllCostCenetrs Method: ');
}
populateHeaderDet()
{
this.ersaForm.patchValue({
costCenter: this.iCostCenter.find(cc => cc.cost_center_name === this.iRequest.costCenter.cost_center_name)
)};
<ч />
Редактировать
Из комментариев кажется, что на самом деле вы хотите дождаться завершения нескольких наблюдаемых, прежде чем вызывать метод populateHeaderDet()
. Одним из подходов к решению этой проблемы было бы использование метода rxjs zip .
Поскольку я не видел остальную часть вашего кода, трудно сказать наверняка, но вы можете попробовать что-то вроде этого
const costCentres$ = this._appParams.getAllCostCenters();
const companyCodes$ = this._appParams.getAllCompanyCodes()
zip(
costCentres$,
companyCodes$,
(costCentres: string[], companyCodes: string[]) => ({costCentres, companyCodes}))
.subscribe(data => {
this.iCostCenter = data.costCentres;
this.companyCodes = data.companyCodes;
this.populateHeaderDet()
});