这里使用得是window的一个属性navigator
function checkConnectionStatus() {
const networkType = window.navigator.onLine;
if (!networkType) {
// 网络速度慢,给出提示
message({
type: "error",
message: "当前网络未连接,请检查网络!"
});
return false
}
return true
}
如果断网直接提示,并不走请求逻辑
/**
* post方法,对应post请求
* @param {String} url [请求的url地址]
* @param {Object} params [请求时携带的参数]
*/
export function post(url, params, isLoading = true) {
// 在发送请求之前判断网络状态
const flag = checkConnectionStatus()
if(!flag) return
if (isLoading == true) {
var loadingInstance = Loading.service({
lock: true,
text: "加载中...",
background: "rgba(255, 255, 255, 0.3)"
});
}
return new Promise((resolve, reject) => {
Axios.post(url, QS.stringify(params))
.then(res => {
if (loadingInstance) {
setTimeout(() => {
loadingInstance.close();
}, 0);
}
resolve(res.data);
})
.catch(err => {
if (loadingInstance) {
setTimeout(() => {
loadingInstance.close();
}, 0);
}
reject(err.data);
});
});
}
这里需要在响应拦截器中做判断
// 设置请求超时
Axios.defaults.timeout = 20000;
Axios.interceptors.response.use(
···
// 服务器状态码不是成功的情况
error => {
if (error.message.includes("timeout")) {
message({
type: "error",
message: "网络连接超时,请检查网络"
});
return Promise.reject(error.response);
} else if (error.response.status) {
// 其他错误,直接抛出错误提示
default:
break;
}
return Promise.reject(error.response);
}
}
)