ruoyi-plus-soybean/src/service/request/errorHandler.ts

74 lines
2.0 KiB
TypeScript
Raw Normal View History

const ERROR_STATUS = {
400: '400: 请求出现语法错误',
401: '401: 用户未授权~',
403: '403: 服务器拒绝访问~',
404: '404: 请求的资源不存在~',
405: '405: 请求方法未允许~',
408: '408: 网络请求超时~',
500: '500: 服务器内部错误~',
501: '501: 服务器未实现请求功能~',
502: '502: 错误网关~',
503: '503: 服务不可用~',
504: '504: 网关超时~',
505: '505: http版本不支持该请求~'
};
type ErrorStatus = keyof typeof ERROR_STATUS;
/**
*
* @param error -
*/
2021-07-20 10:07:35 +08:00
export function errorHandler(error: any): void {
2021-08-26 14:09:31 +08:00
const { $message: Message } = window;
if (error.response) {
const status = error.response.status as ErrorStatus;
2021-08-26 14:09:31 +08:00
Message?.error(ERROR_STATUS[status]);
return;
}
if (error.code === 'ECONNABORTED' && error.message.includes('timeout')) {
2021-08-26 14:09:31 +08:00
Message?.error('网络连接超时~');
return;
}
if (!window.navigator.onLine || error.message === 'Network Error') {
2021-08-26 14:09:31 +08:00
Message?.error('网络不可用~');
return;
}
2021-08-26 14:09:31 +08:00
Message?.error('请求错误~');
}
/**
*
* @param duration - (ms)
*/
export function continuousErrorHandler(duration: number) {
let errorStacks: string[] = [];
function pushError(id: string) {
errorStacks.push(id);
}
function removeError(id: string) {
errorStacks = errorStacks.filter(item => item !== id);
}
function handleError(id: string, callback: Function) {
callback();
setTimeout(() => {
removeError(id);
}, duration);
}
function handleContinuousError(callback: Function) {
const id = Date.now().toString(36);
const { length } = errorStacks;
if (length > 0) {
pushError(id);
setTimeout(() => {
handleError(id, callback);
}, duration * length);
} else {
pushError(id);
handleError(id, callback);
}
}
return handleContinuousError;
}