期望:
onTabItemTap内执行A操作
onShow内执行B操作
期望执行的顺序是 A -> B
问题:发现onTabItemTap的触发是在onShow之后,会变成 B -> A
尝试解决:
不过这样是否能保证 A -> B 的执行顺序呢?
Page({ onTabItemTap() { // 执行A操作 }, onShow() { setTimeout(() => { // 执行B操作 }, 10) } }) |
tabbar页面:home , order , my三个页面,
order页面顶部有 全部,开发中,已完成三种状态,暂且叫A,B,C, current分别是'',1,2
my页面有A,B,C三个跳转到order页面的按钮,跳转之前将状态current存进app.globalData中,
order页面的onShow每次获取app.globalData赋值给data里的current,然后请求列表,每次点击A,B,C按钮 再将点击的current分别存进app.globalData和data里然后请求列表,这样有个好处,点击列表查看详情在返回列表页面,顶部的状态会锁定,但是又出现另外一种情况,假设锁定在B上,点击home和my的tabbar,再进入order页面,不是从A开始默认查询的,还是刚才的状态,这是因为app.globalData没有赋值为'' ,那有没有监听tabbar的方法那,于是找到了onTabItemTap方法,但是这个方法比onShow后执行,也就是说进入到order页面app.globalData赋值为'',也没有onShow里app.globalData赋值早,这里就比较崩溃,那能不能用await和promise方法那,让onTabItemTap执行完再执行onshow里的方法,这里又出现一个新的问题 await onTabItemTap() 这里的参数没有,导致下面onTabItemTap(item)的item.index 为undefined,那行吧,我不加参数,你会发现onTabItemTap执行了2次,一次onshow里的await调用,一次默认的,这很不友好。于是换成在onshow里加settimeout,延迟执行onshow里的方法,即使设置成20毫秒,依然觉得页面的显示不顺畅,就是延迟造成的,这里就很崩溃了,想砸键盘。闭目养神了一会,把流程再想了一遍,如果是从my页面进入有没有其他办法,发现不行,只有onTabItemTap可行, 灵光一现,不管当前current处在什么状态,如果点击tabbar.页面进入home和my页面,在这几个页面里加onTabItemTap,然后把app.globalData赋值为全部不就解决了吗,这样点击tabbar进入order一定是全部,之前的需求还能满足,于是写代码,操作了一番,成了,页面加载也通畅。
个人觉得延时不安全。可以用Promise对像进行异步回调,A操作完成后再A的回调中执行B操作
这个顺序不合理啊,我理解应该onShow是最后啊