我通常是一位有角色的开发人员,正在做出反应。如果这个问题看起来很简单,请原谅。
我有一个简单的承诺
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
请帮忙。
答案 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)
});