问题概述
在wx.navigateTo的success回调函数中继续调用wx.navigateTo,页面跳转与预期不一致。
复现方法
1. 使用代码片段 https://developers.weixin.qq.com/s/PbxxKcmZ7Q7e
2. 点击页面中的navigate按钮,将会通过递归进行多次页面跳转,代码如下:
const NAVIGATE_COUNT = 5; const navigate = (times) => { const url = `/page/index?times=${times}`; console.log( 'navigate to' , url); wx.navigateTo({ url, success(res) { console.log( 'success' , times, res); if (times > 1) { navigate(times - 1); } }, fail(res) { console.log( 'fail' , times, res); } }) } navigate(NAVIGATE_COUNT); |
3. 在模拟器和iOS上,会出现页面历史丢失的现象(可以通过后退查看页面栈,会发现数量比预期的少);在Android上没有此问题
4. 点击页面中的navigate with timeout按钮,该按钮与前者的区别在于会在success后使用setTimeout延迟300ms再进行调用
success(res) { console.log( 'success' , times, res); if (times > 1) { navigate(times - 1); } }, |
5. 在模拟器/iOS/Android中均可以正常跳转
这种tab切换一直点就会出现问题,脑瓜疼!
请问这样跳转的具体使用场景是什么?
1. 用户在PageA点击“支付按钮”,此时由于用户未登陆,将进入PageB进行登陆
2. 用户在PageB上登陆完成,这个时候代码触发 wx.navigateBack 回到PageA
3. 回到PageA后(即navigateBack的callback执行),代码立刻调用wx.navigateTo进入PageC,即真正的支付页面
很好奇这是什么需求