即使在成功

时间:2017-11-19 07:38:35

标签: javascript reactjs

我通常是一位有角色的开发人员,正在做出反应。如果这个问题看起来很简单,请原谅。

我有一个简单的承诺

    return axios(`team/${this.state.teamId}/player`, this.state)
        .then((response) => {
            console.log('formSubmit success');

            this.store.dispatch({
                type:       constants.PLAYER_UPDATE,
                payload:    response.data.user,
            });
            return false;

        })
        .catch((error) => {
            console.error('Error', error.response.data);
            this.setState({
                saveStatus: error.response.data.message
            });
            return Promise.reject(error)
        });

在网络标签中,我可以看到该网址已获取。 同时调用store.dispatch,因为它在控制台中打印。

但同时它在catch语句中调用代码。 我的控制台输出是

formSubmit success                    Player.js:127
Store BEFORE | PLAYER_UPDATE          Store.js:76

Uncaught (in promise) TypeError: Cannot read property 'data' of undefined
at Player.js:135

为什么一切成功后它会在CATCH()之后发生?我甚至在this.store.dispatch

的末尾添加了return语句

请帮忙。

1 个答案:

答案 0 :(得分:0)

catch函数将捕获then中出现的任何错误,如果您想捕获promise中的错误,您可能希望在then中使用第二个回调功能。你应该这样做:

return axios.get(`endpoint`)
   .then(successCallback, errorCallback);

或者,在您的情况下,

return axios(`team/${this.state.teamId}/player`, this.state)
        .then((response) => {
            console.log('formSubmit success');

            this.store.dispatch({
                type:       constants.PLAYER_UPDATE,
                payload:    response.data.user,
            });
            return false;

        }, (error) => {
            console.error('Error', error.response.data);
            this.setState({
                saveStatus: error.response.data.message
            });
            return Promise.reject(error)
        });