clearInterval只执行一次,执行后,setInterval也不执行了??

//每隔两分钟判断设备是否在线

var timmer;
var isStart=false;
function isOnLine(){
    var changeLine=Parse.Object.extend('ElevatorBasic');
    var query=new Parse.Query(changeLine);
    query.find({
        success:function(result){
            if(result.length>0){
                result.forEach(function(val){
                    var clock_time=new Date().getTime();
                    var last_clock_time=new Date(val.get("last_clock_time")).getTime();
                    var minus_time=clock_time-last_clock_time;
                    if(minus_time>1000*60*2){
                        val.set("elevator_line","离线");
                        val.save();
                    }else{
                        val.set("elevator_line","在线");
                        val.save();
                    }
                })
                isStart=true;
            }
        },
        error:function(error){
            console.log("电梯状态更新失败");
        }
    })
}
timmer=setInterval(function(){
    isOnLine();
    if(isStart){
        console.log("no",isStart);
        clearInterval(timmer)
    }
},120000)

要每隔2min执行一次,执行完后清空定时器,可是clear清空一次之后,定时器就没反应了,不知道是怎么回事?

阅读 4.1k
3 个回答

clearInterval 就是停止定时器,为什么定时器还要有反应? 既然还要跑定时器,那干嘛去停止

代码逻辑有问题啊,

timmer=setInterval(function(){
    isOnLine();
    if(isStart){
        console.log("no",isStart);
        clearInterval(timmer);//这个地方把定时器关了,定时器不会执行
    }
},120000)

用函数把开始计时器的逻辑包起来,clearInterval()后在重新 invoke 即可:

// ...
function startTimer() {
    timmer=setInterval(function(){
        isOnLine();
        if(isStart){
            console.log("no",isStart);
            clearInterval(timmer);
            // 重新开始计时
            startTimer();
        }
    },120000)
}
// 初始化,开启计时器
startTimer();
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题