资讯专栏INFORMATION COLUMN

99%的程序都没有考虑的网络异常?使用Fundebug.notify()主动上报

ChanceWong / 1175人阅读

摘要:而且官方也给出了示例在回调函数中上报异常为了确保完全掌握小程序的运行状况,我们将异常上报。的微信小程序插件除了可以自动捕获异常外,还支持通过接口主动上报异常。

近日看到一篇文章99%的程序都没有考虑的网络异常,开篇提到:

绝大多数程序只考虑了接口正常工作的场景,而用户在使用我们的产品时遇到的各类异常,全都丢在看似 ok 的 try catch 中。如果没有做好异常的兼容和兜底处理,会极大的影响用户体验,严重的还会带来安全和资损风险。

于是,笔者分析了 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 万用户。并且,如今产品都是体验至上,如果遇到这样的问题,用户极大可能就弃你而去,流失了客户就等于流失了收入。

如何妥善地处理接口异常的情况是一件严肃的事情,应当被重视起来。

妥善处理请求异常

那么,应当如何做呢?首先要定义请求异常的处理代码,比如微信开放接口的参数中有fail(“接口调用失败的回调函数”)、Promise 的catch部分;其次,根据异常可能导致的后果,在函数中做相应的处理。如果会导致后续操作失败、或则界面无反馈,那么应当在 fail 回调中正确处理;如果你真的认为基本不可能出问题,那么至少写个异常上报。即使出错了,也知道具体的情况。

下图是微信支付接口的参数列表,其中包含了接口调用失败的回调函数(fail)。

而且官方也给出了示例:

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.jsonLaunch函数下面调用wx.requestPayment来进行测试。

Fundebug 的微信小程序插件捕获并上报了异常:

metaData标签还可以看到我们配置的 metaData,也就是fail回调函数的res参数。

因此,我们可以知道失败的原因是订单过期。

另外,如果在二维码页面停留时间过久,也会触发报错:

通过简单的加入几行代码,就可以将小程序的异常情况了如指掌。而且 Fundebug 的微信小程序插件还可以监控线上 JavaScript 执行异常、自动捕获wx.request请求错误、监控慢 HTTP 请求,推荐大家接入试用!

关于Fundebug

Fundebug专注于JavaScript、微信小程序、微信小游戏、支付宝小程序、React Native、Node.js和Java线上应用实时BUG监控。 自从2016年双十一正式上线,Fundebug累计处理了10亿+错误事件,付费客户有阳光保险、核桃编程、荔枝FM、掌门1对1、微脉、青团社等众多品牌企业。欢迎大家免费试用!

版权声明

转载时请注明作者 Fundebug以及本文地址:
https://blog.fundebug.com/2019/07/08/report-http-error-by-fundebug-notify/

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/105399.html

相关文章

  • 99%程序没有考虑网络异常

    摘要:本文由云社区发表绝大多数程序只考虑了接口正常工作的场景,而用户在使用我们的产品时遇到的各类异常,全都丢在看似的中。在面板,还可以对请求进行暂停延迟等网络异常的模拟。小程序实现最后,留一道思考题。 本文由云+社区发表 绝大多数程序只考虑了接口正常工作的场景,而用户在使用我们的产品时遇到的各类异常,全都丢在看似 ok 的 try catch 中。如果没有做好异常的兼容和兜底处理,会极大的影...

    HollisChuang 评论0 收藏0
  • Sentry异常监控方案部署-前端攻略

    摘要:故而,我们需要在项目出现异常时主动对其进行收集上报,分析原因和影响后制定下一步解决方案。所以,我们需要一款成熟的异常监控系统来协助我们。最近在公司项目中部署了,用于项目中异常监控,涵盖了前端后端。 原文首发于我的个人博客: https://lonhon.top/ 凡事只要有可能出错,那就一定会出错 对于任何一个项目而言,本地测试肯定做不到100%覆盖,而且,我们也不能保证用户能按照我们...

    Lorry_Lu 评论0 收藏0
  • 美团外卖Android Crash治理之路

    摘要:通过团队的全力全策,美团外卖的平均率从千分之三降到了万分之二,最优值万一左右率统计方式次数。美团外卖自年创建以来,业务就以指数级的速度发展。目前美团外卖日完成订单量已突破万,成为美团点评最重要的业务之一。 面试中常常问到的是Android的性能优化以及Crash处理。 今天我们来学习一下啊美团App的Crash处理。更多参考《Android性能优化:手把手带你全面实现内存优化》 原为地...

    sshe 评论0 收藏0
  • 美团外卖Android Crash治理之路

    摘要:通过团队的全力全策,美团外卖的平均率从千分之三降到了万分之二,最优值万一左右率统计方式次数。美团外卖自年创建以来,业务就以指数级的速度发展。目前美团外卖日完成订单量已突破万,成为美团点评最重要的业务之一。 面试中常常问到的是Android的性能优化以及Crash处理。 今天我们来学习一下啊美团App的Crash处理。更多参考《Android性能优化:手把手带你全面实现内存优化》 原为地...

    elva 评论0 收藏0
  • JavaScript之错误异常探讨

    摘要:提供一套错误处理机制,错误是干扰程序正常流程的非正常的事故。构造函数是通用错误类型,除了类型,还有等类型。浏览器输出其他错误类型构造函数是继承,实例是一致的。数值超出有效范围数值超出有效范围创建一个实例,表示错误的原因无效引用。 同步发布于 https://github.com/xianshanna... 我的建议是不要隐藏错误,勇敢地抛出来。没有人会因为代码出现 bug 导致程序崩溃...

    LdhAndroid 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<