65 行
1.6 KiB
JavaScript

import axios from 'axios';
import { failed } from './alert';
import qs from 'qs';
import History from './history';
export function get(url) {
return send(
axios.get(url, {
headers: {
Authorization: localStorage.getItem('jwt'),
"Allow-Control-Allow-Origin": "*"
}
}),
() => get(url)
);
}
export function post(url, data) {
return send(
axios.post(url, qs.stringify(data), {
headers: {
Authorization: localStorage.getItem('jwt'),
"Allow-Control-Allow-Origin": "*"
}
}),
() => post(url, data)
);
}
const waitToSend = [];
async function send(xhr, retryFunc) {
if (waitToSend.length) {
waitToSend.push(retryFunc);
return;
}
try {
const { data } = await xhr;
console.log("recv: ", data);
return {
...data,
networkStatus: 200
};
}
catch (err) {
const failData = {
networkStatus: err?.response?.status ?? -1,
status: false
};
if (err?.response?.status === 401) {
History.force('/login');
return failData;
}
waitToSend.push(retryFunc);
if (err.message === 'Network Error')
return await failed('您的设备似乎断网了,请检查网络后重试或刷新', flushWaitList) || failData;
if (err?.response?.status === 504)
return await failed('请求超时,请耐心等待几秒后重试或刷新', flushWaitList) || failData;
return await failed('服务器出现问题,请稍后重试或刷新', flushWaitList) || failData;
}
}
function flushWaitList() {
waitToSend.forEach(retryFunc => retryFunc());
waitToSend.splice(0, waitToSend.length);
}