背景
某个风和日丽的正午,我正在美滋滋的摸鱼,突然测试给我弹一个bug,让我摸脑阔想了一下午😅。
具体就是:通过小程序的扫一扫功能(扫描二维码),它会从首页跳转到二开页面。
问题在于:它会从二开页面接着继续跳转到新的页面(输入车牌页面)啊😫。
找问题的过程
使用扫一扫功能,会跳转到一个中转页,再通过解析二维码参数,判断跳转到相应的页面。
1. 会不会参数判断有误?
找了半天,参数都是正常传值或赋值的。没有影响。
2. 是不是跳转页面的方法调用错误?
一开始,我猜测是因为跳转页面时,未关闭中转页页面,导致继续进行中转页的其他逻辑。然后我排查了几个小时,log页面栈,发现都是正常关闭中转页面跳转到二开页了。
完了,当时在想这什么垃圾逻辑哪里错了,我又没有改这块的代码😥😥😥
悲伤了一下午,最后我使用ai大法,找了半天终于发现问题!!
问题
多次使用扫一扫,app.getUserId的内容由于异步请求,可能页面跳转了还会执行该内容,导致重新加载getPage,跳转到错误的页面。
重点注意:!!
await app.getUserId("pages/homepage/homepage")
这些异步任务不会因为页面跳转而自动取消,它们会在后台继续执行,直到完成。
解决方案
由于没办法仔细修改getUserId的内容,只能添加参数hasExecuted,判断是否多次调用跳转,拦截多次请求操作。
(别人做的我不敢虾改逻辑啊啊🙄)
hasExecuted: false,//判断是否多次调用跳转
async onShow() {
// 二次扫描不再重新加载
if (this.hasExecuted) return;
this.hasExecuted = true;
//...其他内容
await app.getUserId("pages/homepage/homepage")
await this.getPage();
}
但愿不会出奇怪的bug☹
后记
虽然bug解决了,但浪费了我美好摸鱼的下午时间。
小程序真的坑巨多!!