使用try和catch语句处理异步HTTP错误

时间:2019-03-05 06:11:00

标签: javascript reactjs

我希望这是一个简单的方法:

我正在尝试在ReactJS动作创建器的try和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状态。

这可能吗?

2 个答案:

答案 0 :(得分:1)

根据await MDN docs

  

await表达式导致异步函数执行暂停直到   承诺得到解决,即实现或拒绝,并继续   实现后执行异步功能。恢复后,   等待表达式的值就是已实现的Promise的值。

     

如果Promise被拒绝,则await表达式将抛出被拒绝的信息   值。

因此,如果发生API错误,则会抛出错误对象,您将在catch块中获得该错误对象,并可以使用error.response.statuserror.response.headers来访问错误对象的状态和标头< / p>

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

答案 1 :(得分:1)

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; if (status === 401) { dispatch({type:LOG_USER_OUT}) //LOG_USER_OUT is a logout action } else { dispatch(displayStatus(status, true)) } } } 访问标头。这样的事情应该有用:

{{1}}