···js
// iOS网络轮询检测函数
function startNetworkCheck() {
// 先检查当前网络状态
uni.getNetworkType({
success: (res) => {
const isConnected = res.networkType !== 'none';
lastNetworkState = isConnected;
// 如果当前有网络,标记已加载,不需要轮询
if (isConnected) {
hasLoadedData = true;
console.log('当前有网络,无需轮询');
return;
}
// 无网络时才启动轮询
console.log('当前无网络,启动轮询检测');
let checkCount = 0;
const maxChecks = 120; // 最多检测120次,即120秒
networkCheckTimer = setInterval(() => {
checkCount++;
uni.getNetworkType({
success: (res) => {
const isConnected = res.networkType !== 'none';
console.log(`网络检测第${checkCount}次:`, res.networkType, isConnected);
// 从无网络变为有网络
if (isConnected && !hasLoadedData) {
console.log('=== 检测到网络恢复,重新加载数据 ===');
hasLoadedData = true;
reloadDataFlag.value++;
initData();
stopNetworkCheck();
}
lastNetworkState = isConnected;
// 超过最大检测次数,停止
if (checkCount >= maxChecks) {
stopNetworkCheck();
}
}
});
}, 1000); // 每秒检测一次
}
});
}
function stopNetworkCheck() {
if (networkCheckTimer) {
clearInterval(networkCheckTimer);
networkCheckTimer = null;
}
} 用轮训去检测可以解决
onUnmounted(() => {
stopNetworkCheck();
});
// iOS网络轮询检测
let networkCheckTimer = null;
let lastNetworkState = true; // 上次网络状态
let hasLoadedData = false; // 是否已成功加载过数据
const reloadDataFlag = ref(0); // 通知子组件重新加载
provide('reloadDataFlag', reloadDataFlag); // 通知子组件
子组件:
// 监听网络恢复后重新加载
const reloadDataFlag = inject('reloadDataFlag', ref(0));
watch(reloadDataFlag, (val) => {
if (val > 0 && dataList.value.length === 0) {
console.log('FindProduct: 重新加载');
getProductTypeList();
}
});
2 个回复
DCloud_App_Array
网络请求失败后提供一个重试按钮,用户点击后再重新加载。
或者添加定时刷新机制,失败后定时更新。
ttbobo
···js
// iOS网络轮询检测函数
function startNetworkCheck() {
// 先检查当前网络状态
uni.getNetworkType({
success: (res) => {
const isConnected = res.networkType !== 'none';
lastNetworkState = isConnected;
});
}
function stopNetworkCheck() {
if (networkCheckTimer) {
clearInterval(networkCheckTimer);
networkCheckTimer = null;
}
} 用轮训去检测可以解决
onUnmounted(() => {
stopNetworkCheck();
});
// iOS网络轮询检测
let networkCheckTimer = null;
let lastNetworkState = true; // 上次网络状态
let hasLoadedData = false; // 是否已成功加载过数据
const reloadDataFlag = ref(0); // 通知子组件重新加载
provide('reloadDataFlag', reloadDataFlag); // 通知子组件
子组件:
// 监听网络恢复后重新加载
const reloadDataFlag = inject('reloadDataFlag', ref(0));
watch(reloadDataFlag, (val) => {
if (val > 0 && dataList.value.length === 0) {
console.log('FindProduct: 重新加载');
getProductTypeList();
}
});