微信小程序-页面关闭后,异步请求仍然存在?

67 阅读2分钟

背景

某个风和日丽的正午,我正在美滋滋的摸鱼,突然测试给我弹一个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解决了,但浪费了我美好摸鱼的下午时间。

小程序真的坑巨多!!