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

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

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
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年前 评论

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