一次公司产品微信客户端的BUG
公司的产品是深圳“高交会”参展,而我负责编写微信客服端出现了严重的问题。
那是一款测量身体指标,并且能播放视频广告,用户的测量操作由微信端完成。改代码以前由公司的员工维护,现在我入职并接手了客服端代码。看了原先代码,真是惨不忍睹,然后逼着自己重写接近95%的代码。
这次BUG的情况是,界面有时能显示用户消息,有时不能。iPhone出现的错误次数大于Android设备(仅仅是猜测,未做验证)。反复测试代码的时候,发现是自己代码中,把回调方法玩弄丢了。
// 三个方法都包含异步操作
function a(callback){
const value = 1;
callback(null, value);
// 程序到这就执行完毕了,方法c中的getB不会被执行,do something部分也就不执行了。
}
function b(){
const that = this;
a(function(err, result){
that.value = result;
});
}
b.property.getB = function(callback){
callback(null, this.value);
}
function c(callback){
new b().getB(callback);
}
c(function(err, result){
// do something.
});
这个BUG,也不仅仅由回调方法的错误造成的。项目是前后端分离,微信客户端完全由HTML
和JavaScript
处理业务逻辑,请求分加密和匿名。
在加密请求中,需要在url
添加timestemp
、nonce
、signature
这些参数。服务器会根据timestemp
判断这次请求的是否处理过长,根据服务器时间与timestemp
的时差,判断请求是否超时。这是会遇到一个问题,如果服务器时间和客服端时间不同步,时差过大,就导致数据请求不通过。解决的方案就是,获取服务器时间再计算客户端timestemp
参数。