检查网络是否连接
注意:由于getNetworkType是异步的,正常逻辑是判断出来网络类型后在相应的网络下做不同的操作,但业务逻辑复杂代码较多时,会造成代码结构混乱,不易阅读,所以简单用promise封装一下,return出网络状态。
本案例就是点击按钮时判断网络是否连接,无网络给出提示即可。先判断网络状态:
getNetwork () {
let self = this;
return new Promise((resolve, reject) => {
uni.getNetworkType({
success (res) {
const networkType = res.networkType;
if (networkType === 'none') {
console.log('无网络,返回false')
reject(false)
} else {
console.log('有网络,返回true')
resolve(true)
}
}
})
})
},
问题来了,如何给出提示呢?
提示:无网络状态下,任何互联网资源都无法访问,包括封装的组件或方法,都是不能访问或执行的。
个人认为原因是:本页面以外的所有脚本代码(组件,公共方法,第三方组件等)都属于外部资源。不知道准确不准确,(还有一点疑惑,无网络为什么还能调用getNetworkType???)有懂的大佬可以留言指点指点,多谢~
所以要想一个不用调用外部资源的方法,实现弹窗提示。其实很简单:在本页面内写一个弹窗,通过一个变量控制显示隐藏就行了 。简单代码如下:
<view @click="submit">
按钮点击
</view>
<view v-if="isConnect">
暂无网络,请检查网络连接
</view>
async submit(){
let res = await this.getNetwork();
if(!res){
this.isConnect = true;
setTimeout(()=>{
this.isConnect = false;
},2000)
}
}
这样通过变量控制页面元素实现弹窗提示了~
无网络时,不能引用到页面以外的资源有没有大佬解释一下啊 ~感谢感谢