近日看到一篇文章99%的程序都没有考虑的网络异常,开篇提到:html
绝大多数程序只考虑了接口正常工做的场景,而用户在使用咱们的产品时遇到的各种异常,全都丢在看似 ok 的 try catch 中。若是没有作好异常的兼容和兜底处理,会极大的影响用户体验,严重的还会带来安全和资损风险。git
因而,笔者分析了 GitHub 上的一些开源微信小程序,发现大多数的代码异常处理确实是不够的。编程
//调用登陆接口
wx.login({
success: function() {
wx.getUserInfo({
success: function(res) {
that.globalData.userInfo = res.userInfo;
typeof cb == "function" && cb(that.globalData.userInfo);
}
});
}
});
复制代码
网络请求只考虑then
不考虑catch
小程序
util.getData(index_api).then(function(data) {
//this.setData({
//
//});
console.log(data);
});
复制代码
考虑了异常状况可是没有作妥善的处理微信小程序
db.collection("config")
.where({})
.get()
.then(res => {
console.log(res);
if (res.data.length > 0) {
Taro.setStorage({
key: "config_gitter",
data: res.data[0]
});
}
})
.catch(err => {
console.error(err);
});
复制代码
也许 99%的状况下接口都是正常返回的,只有 1%的状况会失败。看起来好像不是一件严重的事情,可是考虑到用户的量级,这个事情就不那么简单了。假设有 100 万用户,那么就有 1 万用户遇到异常状况,并且若是用户的使用频次很高,影响的何止 1 万用户。而且,现在产品都是体验至上,若是遇到这样的问题,用户极大可能就弃你而去,流失了客户就等于流失了收入。api
如何妥善地处理接口异常的状况是一件严肃的事情,应当被重视起来。安全
那么,应当如何作呢?首先要定义请求异常的处理代码,好比微信开放接口的参数中有fail
(“接口调用失败的回调函数”)、Promise 的catch
部分;其次,根据异常可能致使的后果,在函数中作相应的处理。若是会致使后续操做失败、或则界面无反馈,那么应当在 fail 回调中正确处理;若是你真的认为基本不可能出问题,那么至少写个异常上报。即便出错了,也知道具体的状况。微信
下图是微信支付接口的参数列表,其中包含了接口调用失败的回调函数(fail
)。网络
并且官方也给出了示例:app
wx.requestPayment({
timeStamp: "",
nonceStr: "",
package: "",
signType: "MD5",
paySign: "",
success(res) {},
fail(res) {}
});
复制代码
fail
中上报异常为了确保彻底掌握小程序的运行情况,咱们将异常上报。Fundebug 的微信小程序插件除了能够自动捕获异常外,还支持经过API 接口主动上报异常。
根据其官方文档:
使用 fundebug.notify(),能够将自定义的错误信息发送到 Fundebug
name: 错误名称,参数类型为字符串
message: 错误信息,参数类型为字符串
option: 可选对象,参数类型为对象,用于发送一些额外信息
示例:
fundebug.notify("Test", "Hello, Fundebug!", { metaData: { company: "云麒", location: "厦门" } }); 复制代码
首先在 Fundebug 建立一个小程序监控项目,并按照指示接入插件,而后在app.js
的onLaunch
函数下面调用wx.requestPayment
来进行测试。
Fundebug 的微信小程序插件捕获并上报了异常:
在metaData
标签还能够看到咱们配置的 metaData,也就是fail
回调函数的res
参数。
所以,咱们能够知道失败的缘由是订单过时。
另外,若是在二维码页面停留时间太久,也会触发报错:
经过简单的加入几行代码,就能够将小程序的异常状况了如指掌。并且 Fundebug 的微信小程序插件还能够监控线上 JavaScript 执行异常、自动捕获wx.request
请求错误、监控慢 HTTP 请求,推荐你们接入试用!
Fundebug专一于JavaScript、微信小程序、微信小游戏、支付宝小程序、React Native、Node.js和Java线上应用实时BUG监控。 自从2016年双十一正式上线,Fundebug累计处理了10亿+错误事件,付费客户有阳光保险、核桃编程、荔枝FM、掌门1对一、微脉、青团社等众多品牌企业。欢迎你们免费试用!
转载时请注明做者 Fundebug以及本文地址: blog.fundebug.com/2019/07/08/…