javascript - 即使在 SUCCESS 之后,React 也会执行 PROMISE 的 CATCH 语句

标签 javascript reactjs

我通常是一名 Angular 开发人员,正在 React 中工作。如果这个问题看起来很简单,请原谅。

我有一个简单的 promise

    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)
        });

在网络选项卡中,我可以看到 URL 提取正常。 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 语句

请帮忙。

最佳答案

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)
        });

关于javascript - 即使在 SUCCESS 之后,React 也会执行 PROMISE 的 CATCH 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47374675/

相关文章:

javascript - goBack 导航调用后未调用 componentDidMount

css - 如何从 Material UI TextField 中删除箭头图标

javascript - 如何使用 React 呈现不同的布局?

javascript - 自定义文件输入

javascript - tinyMCE 头部样式

javascript - 如何在更改选择元素的宽度时固定所有元素位置

javascript - 如何将 React 应用程序的生产 npm 版本部署到 Azure 应用服务

javascript - 在 VueJS 中使用计算属性搜索过滤器

javascript - 在javascript中的require中传递变量

javascript - 如何使用 ES6 传播更新多个对象子字段?