定时器常见问题

| 双定时器

定时器启用前一定要先清除!!!

setTimeoutFn(){
    setTimeout(() => {
        this.second = this.second -1;
        if(this.second === 0){
            this.second = 10;
            this.ifFail = false;
        } else {
            this.setTimeoutFn();
        }
    }, 1000);
}

程序化的事件侦听器

  • 通过 $on(eventName, eventHandler) 侦听一个事件
  • 通过 $once(eventName, eventHandler) 一次性侦听一个事件
  • 通过 $off(eventName, eventHandler) 停止侦听一个事件

在页面挂载时定义计时器,需要在页面销毁时清除定时器

// 常用方法
export default {
    mounted() {
        this.timer = setInterval(() => {
            console.log(Date.now())
        }, 1000)
    },
    beforeDestroy() {
        clearInterval(this.timer)
    }
}

export default {
    mounted() {
        this.creatInterval('hello')
        this.creatInterval('world')
    },
    creatInterval(msg) {
        let timer = setInterval(() => {
            console.log(msg)
        }, 1000)
        this.$once('hook:beforeDestroy', function() {
            clearInterval(timer)
        })
    }
} 

参考详情