feat(pda): connect online picking workflow
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user