taro-s4s
Version:
Nerv-multi多端开发解决方案
57 lines (48 loc) • 1.59 kB
JavaScript
const noop = () => {}
export default class NetInfo {
constructor (connectionType = 'wifi', effectiveConnectionType = '4g') {
this.connectionType = connectionType
this.effectiveConnectionType = effectiveConnectionType
this.eventMaps = {}
this.connectedStatus = connectionType === 'wifi' || connectionType === 'cellular'
}
isConnected = {
fetch: this.fetch.bind(this)
}
fetch () {
return new Promise((resolve, reject) => {
resolve(this.connectedStatus)
})
}
getConnectionInfo () {
return new Promise((resolve, reject) => {
const res = {}
res.type = this.connectionType
res.effectiveType = this.effectiveConnectionType
resolve(res)
})
}
addEventListener (eventName, listener = noop) {
this.eventMaps[eventName] = listener
}
removeEventListener (eventName, listener = noop) {
if (this.eventMaps[eventName] === listener) {
delete this.eventMaps[eventName]
}
}
// 纯粹为了模拟测试用,主动更改网络状态
changeNetworkType (connectionType, effectiveConnectionType = '4g') {
if (this.connectionType !== connectionType) {
this.connectionType = connectionType
if (connectionType === 'cellular') {
this.effectiveConnectionType = effectiveConnectionType
}
this.connectedStatus = connectionType === 'wifi' || connectionType === 'cellular'
const res = {}
res.type = this.connectionType
res.effectiveType = this.effectiveConnectionType
const fn = this.eventMaps['connectionChange']
fn && fn(res)
}
}
}