Javascript 使用try-and-catch语句处理异步http错误

Javascript 使用try-and-catch语句处理异步http错误,javascript,reactjs,Javascript,Reactjs,我希望这是一个简单的问题: 我正在尝试在ReactJS action creator中的try-and-catch语句中实现错误处理 export const getUserKitchens = () => async dispatch => { try{ const response = await axios.get( `${baseURL}customer/get-user-kitchens/`, )

我希望这是一个简单的问题:

我正在尝试在ReactJS action creator中的try-and-catch语句中实现错误处理

export const getUserKitchens = () => async dispatch => {
    try{
        const response = await axios.get(
            `${baseURL}customer/get-user-kitchens/`,
         )
        dispatch({type:LOAD_USER_KITCHENS, payload: response.data})
    } catch(e) {
        const msg = "something"
        dispatch(displayStatus(msg, true))
    }
}
如果请求失败,HTTP状态为401,我想注销该用户。因此,我需要从catch语句中访问Http响应头并从中检索Http状态

这可能吗?

根据

wait表达式导致异步函数执行暂停,直到 承诺已解决,即履行或拒绝,并恢复 完成后执行异步函数。会议恢复后 等待表达的价值是履行承诺的价值

如果承诺被拒绝,wait表达式将抛出拒绝的承诺 价值观

因此,如果存在API错误,将抛出错误对象,该对象位于
catch
块中,可以使用
error.response.status
error.response.headers

export const getUserKitchens = () => async dispatch => {
    try{
        const response = await axios.get(
            `${baseURL}customer/get-user-kitchens/`,
         )
        dispatch({type:LOAD_USER_KITCHENS, payload: response.data})
    } catch(e) {
        const status = e.response.status;
        dispatch(displayStatus(status, true))
    }
}

catch
语句中的
e
对象是错误对象。您可以访问带有
error.response.status
的状态代码和带有
error.response.headers
的标题。类似这样的东西应该很有用:

export const getUserKitchens = () => async dispatch => {
    try{
        const response = await axios.get(
            `${baseURL}customer/get-user-kitchens/`,
         )
        dispatch({type:LOAD_USER_KITCHENS, payload: response.data})
    } catch(e) {
        const status = e.response.status;
        if (status === 401) {
           dispatch({type:LOG_USER_OUT}) //LOG_USER_OUT is a logout action
        } else {
          dispatch(displayStatus(status, true))
        }
    }
}

catch语句中的
e
对象是错误对象。您可以访问带有
error.response.status
的状态代码和带有
error.response.headers
的标题。这是您要求的吗?还是您要求在
axios
对象上进行全局配置?如果有任何响应是
401
code,您将在该对象上注销?太好了!不,那正是我要找的!好的,在问题中添加了。如果它符合您的要求,请接受它。:-)