Проблема с кодом сейчас заключается в том, что fillForm запускается без ожидания ответа сервера, а свойство proCatThird
не заполняется требуемым ответом.
Пожалуйста, сделайте это в вашем компоненте:
constructor(
private activatedRoute: ActivatedRoute,
private comProductService: ComProductService,
) { }
ngOnInit() {
this.comProductService.getProductCategories().subscribe((response) => {
this.proCatFirst = response;
this.fillFormValues(); // fill form values when the data has been received from server
});
}
fillFormValues() {
this.activatedRoute.data.subscribe(data => {
this.product = data['product'];
this.productForm.patchValue({
name: this.product.name,
category: this.product.category,
});
const catName = this.comProductService.proCatThird.find(pct => pct.id === this.product.category).name;
});
}
РЕДАКТИРОВАТЬ: ПРЕДЛОЖЕНИЕ для подписки в рамках подписки
ngOnInit() {
this.comProductService.getProductCategories()
.pipe(
mergeMap((response) => {
this.proCatFirst = response;
been received from server
return this.activatedRoute.data;
})
)
.subscribe(data => {
this.product = data['product'];
this.productForm.patchValue({
name: this.product.name,
category: this.product.category,
});
const catName = this.comProductService.proCatThird.find(pct => pct.id === this.product.category).name;
});
}
Таким образом, у вас будет только одна подписка, которая срабатывает при загрузке страницы (компонент init);