微信小程序真机上clearInterval()失效的解决方法
浏览次数:2248
微信小程序
宜宾网站建设
项目有个记录用户视频播放历史的功能,和更新用户学习时长的功能,一个是10秒中走一次接口,一个是30秒走一个接口,所以要使用定时器,在一期开发中,这个功能当时测试的是没有问题的,今天二期开发测试时,发现clearInterval()没有效果了,内存泄漏了!!!
当时的代码时这样的:
data: {
loading: '',
update: ''
},
startUpdate() {
let that = this
that.data.loading = setInterval(() => {
that.updateProgess()
},10000)
if(isDetail == 0 && that.data.isStudent) {
that.data.update = setInterval(() => {
that.updateTime()
},30000)
}
},
//取消更新视播放时长方法
stopUpdate() {
let that = this
clearInterval(that.data.loading)
if(isDetail == 0 && that.data.isStudent){
clearInterval(that.data.update)
}
that.setData({
isPlay: false
})
}
onHide: function () {
this.stopUpdate()
},
onUnload: function () {
this.stopUpdate()
},
代码似乎没啥问题,网上也都是这样来初始化定时器并清除定时器的,之前也是可以的而且在模拟器上也是没问题的可以清除,但是真机调试的时候,页面消失了还是会偷跑接口。
解决方法:
在每次执行that.data.loading = setInterval(() => {},time)之前先清除一下loading,即改成如下代码就可以正常清除定时器了
data: {
loading: '',
update: ''
},
startUpdate() {
let that = this
clearInterval(that.data.loading)
that.data.loading = setInterval(() => {
that.updateProgess()
},10000)
if(isDetail == 0 && that.data.isStudent) {
clearInterval(that.data.update )
that.data.update = setInterval(() => {
that.updateTime()
},30000)
}
},
//取消更新视播放时长方法
stopUpdate() {
let that = this
clearInterval(that.data.loading)
if(isDetail == 0 && that.data.isStudent){
clearInterval(that.data.update)
}
that.setData({
isPlay: false
})
}
onHide: function () {
this.stopUpdate()
},
onUnload: function () {
this.stopUpdate()
},