Мне трудно понять, что я делаю неправильно. У меня есть функция, которая получает URL-адрес, по которому следует сделать запрос GET, в случае успеха должен заполнить комбо полученными данными (это зависит от того, какая функция вызывает их), в случае сбоя он должен выполнить какой-то общий код.
getFirstCombo = () => {
this.getFromApi('/First/GetAll')
.then(data => this.setState({firstComboOptions: this.parseCombo(data)}))
.catch(error => console.log('ERROR2: ', error));
}
getSecondCombo = () => {
this.getFromApi('/Second/GetAll')
.then(data => this.setState({secondComboOptions: this.parseCombo(data)}))
.catch(error => console.log('ERROR2: ', error));
}
parseCombo = (data: any) => {
const combo = data.map(item => (
{ label: item.description, value: item.id }
));
return combo;
}
getFromApi = (url: string) : Promise<any> => {
return restApiAxios.get(url)
.then(response => {
return response.data;
})
.catch(error => {
console.log('ERROR: ', error);
});
}
этот код выполняется на componentDidMount реактивного компонента, но при сбое он сначала печатает:
ERROR: Error: Network Error
at createError (createError.js:16)
at XMLHttpRequest.handleError (xhr.js:83)
и сразу после:
PanelDatos.tsx:50 ERROR2: TypeError: Cannot read property 'map' of undefined
at PanelDatos.parseCombo (PanelDatos.tsx:55)
at PanelDatos.tsx:50
таким образом, при ошибке выполняется блок catch из getFromApi , а затем он пытается выполнить блок затем в getFirstCombo , что вызывает catch блок из той же функции, потому что данные не существуют, почему это так? Разве он не должен просто выполнить первый catch ? заранее спасибо