47 lines
976 B
JavaScript
47 lines
976 B
JavaScript
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)
|
|
}
|