微信小程序实现长轮询更新业务提醒
代码片段:
data:{
waitTimes:0,//超时变量
timeList:[],//定时器列表
},
myUpdate() {
var maxWait = 10 //超时次数
var newWait = this.data.waitTimes + 1 //执行的次数
if (newWait >= maxWait) { //超时了
console.log(util.formatTime(new Date()), '轮询超时')
} else { //未超时
var time = setTimeout(this.myUpdate, 2000)
this.data.timeList.push(time) // 存储定时器
console.log(util.formatTime(new Date()), '第', newWait, '次轮询中...')
if (newWait === 6) { //拿到数据,轮询终止
console.log(util.formatTime(new Date()), '拿到了所需数据!轮询停止')
this.stopWaiting()
} else { //继续轮询
this.setData({
waitTimes: newWait
})
}
}
},
startWaiting() {
setTimeout(this.myUpdate, 2000)
},
stopWaiting() {
for (var i = 0; i < this.data.timeList.length; i++) {
clearTimeout(this.data.timeList[i]); //清除了所有定时器
}
}
/**
* 生命周期函数--监听页面隐藏
*/
// 点击系统Home键返回上一步时候触发
onHide: function () {
this.stopWaiting()
},
/**
* 生命周期函数--监听页面卸载
*/
// 点击左上角返回箭头时候触发
onUnload: function () {
this.stopWaiting()
},
转载:https://blog.csdn.net/qq_37398834/article/details/115675331
另一个参考:http://willless.com/settimeout-polling-in-applet-to-judge-data-jump-after-updating.html