UNPKG

@sparrowend/isoffline

Version:

is online and offline on nodejs; 检测网络状态(nodejs)

65 lines (60 loc) 1.84 kB
const { isline } = require('./isline') const { pingdnses } = require('./ping') const isFunc = func => Object.prototype.toString.call(func) === '[object Function]' const base = { time: 3000, interval: Infinity, detection: Infinity, offline: () => { }, online: () => { } } function offlineListener(args) { let { time, interval, offline, online } = { ...base, ...args }, status, // true || false _interval = 0, t = null; const reconnectCallback = (func) => { // 重连 if (!isFunc(func)) throw Error('Arguments should be “Function”') siv((args) => { let { status } = args if (status) { clearTimeout(t); t = null; func(args); siv(online, true) return true } else func(args) }) } const siv = (fn, isoff = false) => { t = setTimeout(async () => { status = await isline(pingdnses) let flag = fn({ status }); if (flag) return if (isoff && !status) { clearTimeout(t); t = null offline(reconnectCallback) return } status = null _interval++ if (_interval == interval) { clearTimeout(t) return } siv(fn, isoff) }, isoff ? time : 1000); } siv(online, true) return { clear() { let count = 0 let _t = setInterval(() => { console.log(count, t == null) if (count == 4) clearInterval(_t); t && clearTimeout(t) t = null count++ }, 300); } } } module.exports = { offlineListener, isFunc }