代码片段:

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

标签: none

添加新评论