我在理解自己做错事情时遇到了一些麻烦。我有一个函数,该函数接收一个应向其发出GET请求的URL,如果成功,则用接收到的数据填充一个组合(这取决于哪个函数调用它),如果失败,则应执行一些通用代码。
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);
});
}
此代码在react组件的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
所以,如果失败,则从getFromApi执行catch块,然后尝试执行getFirstCombo中的then块,从而从相同功能导致数据不存在,这是为什么?它不应该执行第一个catch吗?在此先感谢
我在理解自己做错事情时遇到了一些麻烦。我有一个函数,该函数接收应该向其发出GET请求的URL,如果成功,则应使用接收到的数据填充一个组合(....catch
返回的承诺与.then
非常相似,允许您返回自定义值并以这种方式进行处理。