Skip to content

Instantly share code, notes, and snippets.

@degitgitagitya
Last active June 21, 2022 12:33

Revisions

  1. degitgitagitya revised this gist Jul 27, 2021. 2 changed files with 48 additions and 0 deletions.
    21 changes: 21 additions & 0 deletions Api.ts
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,21 @@
    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
    }
    }
    27 changes: 27 additions & 0 deletions ErrorHandler.ts
    Original file line number Diff line number Diff line change
    @@ -18,4 +18,31 @@ export const resolvePromise = async <T>(
    } 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',
    };
    }
    };
  2. degitgitagitya created this gist Jul 27, 2021.
    21 changes: 21 additions & 0 deletions ErrorHandler.ts
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,21 @@
    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;
    }
    };