javascript承诺处理,无法处理错误

问题描述 投票:0回答:1

我在理解自己做错事情时遇到了一些麻烦。我有一个函数,该函数接收一个应向其发出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,如果成功,则应使用接收到的数据填充一个组合(...
javascript reactjs typescript promise
1个回答
0
投票
[.catch返回的承诺与.then非常相似,允许您返回自定义值并以这种方式进行处理。
© www.soinside.com 2019 - 2024. All rights reserved.