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

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

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 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 相关的逻辑。

暂时只想到这些

7年前 评论
讨论数量: 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 相关的逻辑。

暂时只想到这些

7年前 评论

@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

6年前 评论
liyu001989

file

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

6年前 评论

其实第一次进首页看不到消息就是因为请求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)
  }
6年前 评论

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