Búsqueda de sitios web

reactjs - Al usar interceptores de axios no puedo obtener una instancia de AxiosError dentro de un bloque try y catch


Cuando uso interceptores de axios para cerrar la sesión del usuario cuando el código de error es 401, no puedo obtener ningún código de error fuera de mi interceptor. Supongamos que tengo un bloque try y catch fuera de los interceptores de axios. Lo que sucede es que ya no puedo obtener una instancia de AxiosError en ningún bloque try y catch fuera de los interceptores de axios. ¿Alguien sabe cómo solucionar esto?

A continuación está mi interceptor:

api.interceptors.response.use( (response: AxiosResponse) => response,

(error: AxiosError) => {

if (error.response?.status === 401) signOut();

},

);

A continuación se muestra un ejemplo de bloque catch y try (el resultado es undefined):

try {

} catch (err) {

console.log(err.response.status);

}

Respuesta #1

También necesitas devolver el Error si sobrescribes el error del inspector, para permitir que try catch detecte el error...

por ejemplo:

return error.response ? error.response : Promise.reject(new Error(error));

Ejemplo de respuesta del inspector:

// Add interceptors for validate authorization
instance.interceptors.response.use(
  (response) => {
    // do somthing if its needed
    // return response
    return response;
  },
  (error) => {
    if (error.response && error.response.status === 401) {
      // Re-request instance if refresh token updated successfully
      return instance.request(error.config);
    }

    return error.response ? error.response : Promise.reject(new Error(error));
  }
);

Respuesta #2

Deberías hacer "throw error;" como se muestra a continuación.

api.interceptors.response.use(     
(response: AxiosResponse) => response,     
(error: AxiosError) => {       
   if (error.response?.status === 401) {         
     signOut();       
   }       
   console.log('throwing error');       
   throw error;     
},   );