axios catch 没有捕捉到错误
axios catch doesn't catch error
我正在使用 axios 0.17.0
和以下代码:
this.props.userSignupRequest(this.state)
.then( res => { console.log(res.data) } )
.catch( err => { this.setState({ errors: err.response }) } )
当用户注册验证未通过时,服务器设置为 return a 400
。这也显示在控制台中:POST 400 (Bad Request)
,但未执行 setState
。这是为什么?我也试过 console.log(err)
但什么也没有。
POST 400 (Bad Request)
不是错误,是响应不成功。 catch
当请求出现错误时触发。
如果您想捕获 400
或类似的 HTTP 错误,您需要检查 status
例子
this.props.userSignupRequest(this.state)
.then( res => { console.log(res.status) } )
.catch( err => { this.setState({ errors: err.response }) } )
可能存在一些问题,我们可能需要查看您的更多代码才能确定。
Axios 0.17.0 将在 400 响应状态上抛出错误。下面的演示显示了这一点。
意外行为可能是由于 setState()
的异步行为造成的。如果您在调用 setState()
后立即尝试 console.log
状态,那是行不通的。您需要使用 setState
回调。
const signinRequest = () => {
return axios.post('https://httpbin.org/status/400');
}
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
errors: null
}
}
handleSignin = () => {
this.props.userSigninRequest()
.then(result => {
console.log(result.status);
})
.catch(error => {
this.setState({
errors: error.response.status
}, () => {
console.error(this.state.errors);
});
});
}
render() {
return (
<div>
<button onClick={this.handleSignin}>Signin</button>
{this.state.errors}
</div>
)
}
}
ReactDOM.render(<App userSigninRequest={signinRequest} />, document.getElementById("app"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.17.0/axios.js"></script>
<div id="app"></div>
我正在使用 axios 0.17.0
和以下代码:
this.props.userSignupRequest(this.state)
.then( res => { console.log(res.data) } )
.catch( err => { this.setState({ errors: err.response }) } )
当用户注册验证未通过时,服务器设置为 return a 400
。这也显示在控制台中:POST 400 (Bad Request)
,但未执行 setState
。这是为什么?我也试过 console.log(err)
但什么也没有。
POST 400 (Bad Request)
不是错误,是响应不成功。 catch
当请求出现错误时触发。
如果您想捕获 400
或类似的 HTTP 错误,您需要检查 status
例子
this.props.userSignupRequest(this.state)
.then( res => { console.log(res.status) } )
.catch( err => { this.setState({ errors: err.response }) } )
可能存在一些问题,我们可能需要查看您的更多代码才能确定。
Axios 0.17.0 将在 400 响应状态上抛出错误。下面的演示显示了这一点。
意外行为可能是由于 setState()
的异步行为造成的。如果您在调用 setState()
后立即尝试 console.log
状态,那是行不通的。您需要使用 setState
回调。
const signinRequest = () => {
return axios.post('https://httpbin.org/status/400');
}
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
errors: null
}
}
handleSignin = () => {
this.props.userSigninRequest()
.then(result => {
console.log(result.status);
})
.catch(error => {
this.setState({
errors: error.response.status
}, () => {
console.error(this.state.errors);
});
});
}
render() {
return (
<div>
<button onClick={this.handleSignin}>Signin</button>
{this.state.errors}
</div>
)
}
}
ReactDOM.render(<App userSigninRequest={signinRequest} />, document.getElementById("app"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.17.0/axios.js"></script>
<div id="app"></div>