咬定青山不放松,立根原在破岩中。千磨万击还坚劲,任尔东西南北风。

《竹石》 郑燮

野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892

报名链接:报名联系方式

微信小程序真机上clearInterval()失效的解决方法

浏览次数:2248

微信小程序 宜宾网站建设

项目有个记录用户视频播放历史的功能,和更新用户学习时长的功能,一个是10秒中走一次接口,一个是30秒走一个接口,所以要使用定时器,在一期开发中,这个功能当时测试的是没有问题的,今天二期开发测试时,发现clearInterval()没有效果了,内存泄漏了!!!
当时的代码时这样的:

  1. data: {
  2. loading: '',
  3. update: ''
  4. },
  5. startUpdate() {
  6. let that = this
  7. that.data.loading = setInterval(() => {
  8. that.updateProgess()
  9. },10000)
  10. if(isDetail == 0 && that.data.isStudent) {
  11. that.data.update = setInterval(() => {
  12. that.updateTime()
  13. },30000)
  14. }
  15. },
  16. //取消更新视播放时长方法
  17. stopUpdate() {
  18. let that = this
  19. clearInterval(that.data.loading)
  20. if(isDetail == 0 && that.data.isStudent){
  21. clearInterval(that.data.update)
  22. }
  23. that.setData({
  24. isPlay: false
  25. })
  26. }
  27. onHide: function () {
  28. this.stopUpdate()
  29. },
  30. onUnload: function () {
  31. this.stopUpdate()
  32. },

代码似乎没啥问题,网上也都是这样来初始化定时器并清除定时器的,之前也是可以的而且在模拟器上也是没问题的可以清除,但是真机调试的时候,页面消失了还是会偷跑接口。
解决方法:
在每次执行that.data.loading = setInterval(() => {},time)之前先清除一下loading,即改成如下代码就可以正常清除定时器了

  1. data: {
  2. loading: '',
  3. update: ''
  4. },
  5. startUpdate() {
  6. let that = this
  7. clearInterval(that.data.loading)
  8. that.data.loading = setInterval(() => {
  9. that.updateProgess()
  10. },10000)
  11. if(isDetail == 0 && that.data.isStudent) {
  12. clearInterval(that.data.update )
  13. that.data.update = setInterval(() => {
  14. that.updateTime()
  15. },30000)
  16. }
  17. },
  18. //取消更新视播放时长方法
  19. stopUpdate() {
  20. let that = this
  21. clearInterval(that.data.loading)
  22. if(isDetail == 0 && that.data.isStudent){
  23. clearInterval(that.data.update)
  24. }
  25. that.setData({
  26. isPlay: false
  27. })
  28. }
  29. onHide: function () {
  30. this.stopUpdate()
  31. },
  32. onUnload: function () {
  33. this.stopUpdate()
  34. },
目录

您必须遵守 署名-非商业性使用-相同方式共享 使用这篇文章

本文链接:http://www.083158.com/article_details/133

转载注明出处:少儿编程-信息学奥赛-宜宾少儿编程-宜宾市野牛网络科技有限公司

野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892

报名链接:报名联系方式

留言条数·0