Skip to content

Instantly share code, notes, and snippets.

@degitgitagitya
Last active June 21, 2022 12:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save degitgitagitya/495e5613e89d9a660f747ce40e90ca1b to your computer and use it in GitHub Desktop.
Save degitgitagitya/495e5613e89d9a660f747ce40e90ca1b to your computer and use it in GitHub Desktop.
Clean Error Handler For Axios (Typescript)
import Axios, { AxiosRequestConfig } from 'axios';
import { resolveErrorBackEnd, resolvePromise } from '../ErrorHandler';
const someApiCall = async () => {
const requestConfig: AxiosRequestConfig = {
headers: {
Authorization: ``,
},
};
const [data, error] = await resolvePromise<PaginatedConversation>(
Axios.get(``),
requestConfig
),
resolveErrorBackEnd
);
if (error) {
// Handle Error
} else {
// Handle Data
}
}
import { AxiosError } from 'axios';
/**
* @param {Promise<{data:T;}>} promise
* @param {(error:AxiosError<ErrorResolverBackEndDataType>)=>ErrorResolverBackEndType} resolveError
*/
export const resolvePromise = async <T>(
promise: Promise<{
data: T;
}>,
resolveError: (
error: AxiosError<ErrorResolverBackEndDataType>
) => ErrorResolverBackEndType
) => {
try {
const { data } = await promise;
return [data, null] as const;
} catch (error) {
return [null, resolveError(error)] as const;
}
};
/**
* @param {AxiosError<ErrorResolverBackEndDataType>} error
* @returns ErrorResolverBackEndType
*/
export const resolveErrorBackEnd = (
error: AxiosError<ErrorResolverBackEndDataType>
): ErrorResolverBackEndType => {
if (error.response) {
return {
code: error.response.status,
detail: error.response.data.detail
? error.response.data.detail
: error.response.statusText,
};
} else if (error.request) {
return {
code: 500,
detail: 'The request was made but no response was received',
};
} else {
return {
code: 500,
detail: 'Something happened in setting up the request',
};
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment