import { notification } from 'antd'; import { AxiosError } from 'axios'; import { ApiResponse, FailedTuple, ResponseType, SuccessTuple } from '../'; /** * Response processing * * @param promise request * @param ignoreCodes ignore error codes * @returns */ export const apiInterceptors = ( promise: Promise>, ignoreCodes?: '*' | (number | string)[], ) => { return promise .then>(response => { const { data } = response; if (!data) { throw new Error('Network Error!'); } if (!data.success) { if (ignoreCodes === '*' || (data.err_code && ignoreCodes && ignoreCodes.includes(data.err_code))) { return [null, data.data, data, response]; } else { notification.error({ message: `Request error`, description: data?.err_msg ?? 'The interface is abnormal. Please try again later', }); } } return [null, data.data, data, response]; }) .catch>((err: Error | AxiosError) => { let errMessage = err.message; if (err instanceof AxiosError) { try { const { err_msg } = JSON.parse(err.request.response) as ResponseType; err_msg && (errMessage = err_msg); } catch { /* empty */ } } notification.error({ message: `Request error`, description: errMessage, }); return [err, null, null, null]; }); };