小程序编译第一次进首页,未读消息数不出来,需要过 30 秒才会出现?

file
file
js debug发现
它先执行了 unreadcount.js 中的updateUnreadCount方法, 后执行 app.js 中的updateUnreadCount方法,这该如何优化

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
liyu001989
最佳答案

因为第一次获取未读消息是异步的,页面中的 updateUnreadCount 执行的时候可能全局的 unreadCount 还未更新。

  1. 引入 https://www.npmjs.com/package/wepy-redux
  2. 轮训的间隔调小一些;
  3. onLaunch 后第一次调用 this.updateUnreadCount() 获取到未读消息后,调用一次 wepy.setTabBarBadge。但是如果用户进去小程序迅速切换到没有 tabbar 的页面,会有个warning。其实可以接受,当时就是因为这个 warning 才没有在 app.wpy 中写 setTabBarBadge 相关的逻辑。

暂时只想到这些

5年前 评论
讨论数量: 4
liyu001989

因为第一次获取未读消息是异步的,页面中的 updateUnreadCount 执行的时候可能全局的 unreadCount 还未更新。

  1. 引入 https://www.npmjs.com/package/wepy-redux
  2. 轮训的间隔调小一些;
  3. onLaunch 后第一次调用 this.updateUnreadCount() 获取到未读消息后,调用一次 wepy.setTabBarBadge。但是如果用户进去小程序迅速切换到没有 tabbar 的页面,会有个warning。其实可以接受,当时就是因为这个 warning 才没有在 app.wpy 中写 setTabBarBadge 相关的逻辑。

暂时只想到这些

5年前 评论

@liyu001989
好像是更新了 unreadCount 的值,又好像没有。
下面的操作在 Mixin 的 unreaderCount.js

  1. 未点开看 console.log(this.$parent.globalData) 打印的“全局变量”时, unreadCount 为 0(看起来没有在 onLaunch() 获取到)

2.点开看 console.log(this.$parent.globalData) 打印的“全局变量”时, unreadCount 为 20 (看起来在 onLaunch() 获取到了)
对比之后还是搞不懂逻辑,

file

file

file

5年前 评论
liyu001989

file

重现不了,逻辑就是启动的时候开启一个轮训,需要的页面拿到消息数量显示出来

5年前 评论

其实第一次进首页看不到消息就是因为请求user/notifications/stats接口是异步的,在接口返回结果前,unreadCount.js里的onShow()事件先执行了,此时获取到的this.$parent.globalData.unreadCount值为初始化的0。
有一个很简单的解决方案,就是onShow()事件延迟一下调用this.updateUnreadCount(),示例如下:

  onShow() {
    setTimeout(() => {
      this.updateUnreadCount()
    }, 500)  //延迟500毫秒调用,可视实际网络平均状况调整
    this.interval = setInterval(() => {
      this.updateUnreadCount()
    }, 30000)
  }
5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!