In this app, I'm using async await to try handle an API call through a couple of functions. As I'm testing the sad path error routing, I'm noticing that the error does not end up in the catch.
The Action which starts the whole process
export const submitBasicDetails = form => async dispatch => {
    try {
        const response = await interstitialHandlerPromise(Actions.SUBMIT_FORM, form); // <- we end up here
        console.log('submitBasicDetails response', response); // <-- we see the error here
        const {id} = response.data;
        dispatch({
            type: Actions.SUBMIT_FORM,
            id
        });
        return response;
    } catch (error) {
        console.log('ACTION', error); // <-- instead of here :()
        dispatch({
            type: Actions.SUBMIT_FORM_FAIL,
            id: null,
            error: 'There was a server error, please try again later.'
        });
    }
};
The form data then hits this interstitialHandlerPromise where we decide which API method to use:
export const interstitialHandlerPromise = (type, data) => {
    const {requestMethod, config} = determineRequestMethod(type);
    const requests = requestMethod(data);
    return new Promise((resolve, reject) =>
        interstitialHandler(requests, config)
            .then(response => resolve(response))
            .catch(error => {
                console.log('intersitial error', error);
                reject(error);
            })
    );
};
Finally the postForm function which is requests that is inside of the function above:
// /test will cause a 500 error since it doesn't exist
export const postForm = async (form, END_POINT = '/api/test') => {
    const resPayload = form.data;
    const resUrl = `${BASE_URL}${V1}${END_POINT}`;
    try {
        const res = await axios.post(resUrl, {...resPayload});
        return {
            res
        };
    } catch (e) {
        console.log('postForm e', e); // <-- This hits because `/test` returns 500
        return new Error(e.message);
    }
};
