最近在技术交流群里看到有人问道网络错误怎么捕获,没网或网络不佳服务器联络中断,这时候的异常应该怎么捕获?
正好最近也遇到了错误捕获的问题,自己研究了一下,也做了一些做了一些总结,和大家分享一下。当网络不佳或链接超时就会出现类似的报错的

由于服务器没有返回状态码,所以导致错误用状态码判断捕获不到。因为网络错误发出的请求会抛出一个错误,打印出来一看,呀,原来是这样怎么捕获呢,同样遇到这样的问题,然后查了一些资料,原来可以通过 error.message 直接捕获到错误,error是一个错误对象,message 在其原型上。error.message 不仅可以捕获请求时发生的错误,由于js语法不严谨造成的错误也可以捕获到。error 的原型有
Error.prototype.constructor实例原型的构造函数。
Error.prototype.message错误信息。(只有此属性的浏览器兼容性最好)
Error.prototype.name错误名。
Error.prototype.fileName产生该错误的文件名。
Error.prototype.lineNumber产生该错误的行号。
Error.prototype.columnNumber产生该错误的列号。
Error.prototype.stack错误堆栈。
error 的类型有:
· EvalError 此异常不再会被JavaScript抛出
· InternalError 表示出现在JavaScript引擎内部的错误
· RangeError 标明一个错误,当一个值不在其所允许的范围或者集合中
· ReferenceError 代表当一个不存在的变量被引用时发生的错误
· SyntaxError 代表尝试解析语法上不合法的代码的错误
· TypeError 用来表示值的类型非预期类型时发生的错误
· URIError 用来表示以一种错误的方式使用全局URI处理函数而产生的错误
以上所有的类型均继承自 Error因此都具有 Error有的属性,不同浏览器可能会有不同的属性。
小程序的网络错误又是另外一种捕获方式,腾讯做了统一处理,小程序只要后台能返回数据的状态码都是200,所以当地址错误或网络错误时会进入到 fail回调里,但回调参数是个对象,取值只能用 error.errMsg来取值。为了方便统一做了统一封装转换,供大家参考。
1function request(url, data = {}, method = "GET") {
2 return new Promise(function (resolve, reject) {
3 if (/[a-z]/g.test(method)) {
4 method = method.toUpperCase()
5 }
6 wx.showNavigationBarLoading()
7 wx.request({
8 url: url,
9 data: data,
10 method: method,
11 header: {'Content-Type': method === 'GET' ? 'application/json' : 'application/x-www-form-urlencoded'},
12 success: function (res) {
13 if (res.statusCode == 200) {
14 resolve(res.data)
15 /*if (res.data) {
16 if (res.data.code == 0) {
17 resolve(res.data);
18 } else {
19 throwError(res.data, reject)
20 }
21 } else {
22 throwError(res, reject)
23 }*/
24 } else {
25 reject({
26 message: '网络错误,请稍后重试',
27 code: res.statusCode
28 })
29 }
30 },
31 fail: function (err) {
32 if (err.errMsg && !err.message) {
33 err.message = err.errMsg
34 }
35 reject(err)
36 console.log('request failed')
37 },
38 complete() {
39 wx.hideNavigationBarLoading()
40 }
41 })
42 })
43}
以上仅作为笔记记录,后续会继续完善。
本文分享自微信公众号 - web 开发学习(web_learn3)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
来源:oschina
链接:https://my.oschina.net/u/3948755/blog/4445281