收藏
回答

安卓微信 7.0 大bug,navigateTo的onSuccess触发时机大变

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug navigateTo 客户端 7.0 2.4.4

- 当前 Bug 的表现(可附上截图)

navigateTo 的 onSuccess、onComplete 触发时机突然变化,导致线上程序运行异常。假如页面一 navigateTo 页面二,本来的顺序是:

page 1 onLoad,此时执行 navigateTo pageB

--> page 1 onShow

--> navigateTo pageB onSuccess

--> navigateTo pageB onComplete


现在,安卓手机微信7.0突然变为:

page 1 onLoad,此时执行 navigateTo pageB

--> navigateTo pageB onSuccess

--> navigateTo pageB onComplete

--> page 1 onShow


为什么会影响线上程序呢?因为小程序里有这样一个功能,所有扫描小程序都会跳到同一个页面再navigateTo目标页面,这个动作是在 onLoad 里执行的,然后立马return,避免当前页的后续无用功。这样做的好处是让扫码进入的用户始终可以通过左上角返回首页,而且扫码跳转更迅速。


用户通过左上角返回首页,这时需要首次初始化(可能因为某个数据参数而重定向页面),于是我在首页的 onShow 里检测一个变量来判断这是扫码进入的用户跳转到目标页后重新返回过来的,而那个变量就是在 navigateTo 的成功回调里设置的。


现在安卓 微信7.0 改动了navigateTo 成功回调(应该是异步啊)的触发机制,导致线上程序出Bug啦😭😭😭😭












- 预期表现


和以前保持一致


- 复现路径


https://developers.weixin.qq.com/s/p2nicfmu7h5N


- 提供一个最简复现 Demo


运行代码片段,查看log


回答关注问题邀请回答
收藏

3 个回答

  • 琳
    2019-01-09

    看你的描述,暂时看不出在 android7.0中 `navigateTo 的回调变成非异步了`。

    你可以在调用完"navigateTo"后,立即console下,在'navigate'的回调也console下,这样才看得出是不是变成非异步了。

    毕竟onshow很可能也是异步回调,然后不同系统差异会有不同的实现和表现。


    还有,看了看你的业务实现,其实你那个“一个变量”完全可以在调用`navigateTo`后同步执行啊,只监听其"fail"方法来处理异常,这样你就不同管,这回调先后了。

    2019-01-09
    有用
    回复
  • 卢霄霄
    卢霄霄
    2019-01-07

    那。。为啥不干脆在onShow里navigateTo

    2019-01-07
    有用
    回复 2
    • 刘志远
      刘志远
      2019-01-08

      都能达到一样的效果,但放在onLoad里感觉更合理:

      1. 扫码进来时,当前页只是一个中转,越早离开越好

      2. 语义上来说,onShow 里更应该处理前后台切换时的页面更新动作,onLoad里应该处理页面一加载就得决定的事务

      2019-01-08
      回复
    • 卢霄霄
      卢霄霄
      2019-01-08回复刘志远

      哦哦

      2019-01-08
      回复
  • 刘志远
    刘志远
    2019-01-07

    虽然我可以用setTimeout来修复,但是官方老哥们,你们以后不能这样这啊😭😭😭😭😭😭

    2019-01-07
    有用
    回复
登录 后发表内容