let online = true let listening = false const listeners = new Set() function notify() { for (const listener of listeners) listener(online) } function ensureListening() { if (listening || typeof uni === 'undefined') return listening = true if (typeof uni.onNetworkStatusChange === 'function') { uni.onNetworkStatusChange((result) => { online = Boolean(result.isConnected) notify() }) } if (typeof uni.getNetworkType === 'function') { uni.getNetworkType({ success: (result) => { online = result.networkType !== 'none' notify() } }) } } export function isOnline() { ensureListening() return online } export function requireOnline(message = '当前网络不可用,请联网后刷新重试') { if (!isOnline()) { const error = new Error(message) error.network = true throw error } } export function watchNetwork(listener) { ensureListening() listeners.add(listener) listener(online) return () => listeners.delete(listener) }