当需要给程序添加多个定时器时,如何保证定时器不会累加且相互不影响

需要添加一个告警功能,当该节点故障时需要闪烁告警,所以每次判定有故障时就会执行节点告警函数并添加定时器。开始的时候每次执行后如果有新的数据产生就会再次执行一次定时器,这样一个节点可能有多个定时器产生,闪烁的时间也会累加,频率变高。
为了解决这个问题,使用了以下方法:

var timerDS = new Object();
	var timenum=0;
		//查找节点并告警
    function nodeAlarm(keys,array){
	   timenum=keys;
	   {if $Request.controller == 'Index' && $Request.action == 'index'}       
		if(!array.ServerProcessState||array.ServerProcessState!="1"){
		        if(!array.Main||array.Main!="1"){    
				        if(timerDS[timenum]!=null){
							clearInterval(timerDS[timenum]);
							timerDS[timenum]=null;	
                        }
                       					
						editor.scene.findElements(function (e) {
							if (e.id == keys) {							  
							timerDS[timenum]=setInterval(function () {
									if (e.alarm == '设备告警') {
										e.alarm = null;
									} else {
										e.alarm = '设备告警';
										e.alarmColor = '0,0,255';
										//e.alarmFont="20px 宋体 ";
									
									}
								}, 600);
							  
							}
						})
						
					}else{
					    if(timerDS[timenum]!=null){
							clearInterval(timerDS[timenum]);
							timerDS[timenum]=null;	
                        }
                       					
						editor.scene.findElements(function (e) {
							if (e.id == keys) {							  
							timerDS[timenum]=setInterval(function () {
									if (e.alarm == '设备告警') {
										e.alarm = null;
									} else {
										e.alarm = '设备告警';										
										//e.alarmFont="20px 宋体 ";
									
									}
								}, 600);
							  
							}
						})
					       
					}
            
		}else{
		      if(array.Main=="1"){
			      editor.scene.findElements(function (e){
				      	if (e.id == keys) {
						   console.log(e);
						}
				  })
			  }
		     
		}
      {/if}
	}

先定义一个定时器数组,然后定义一个变量表示数组中的id
该id和传过来的参数keys一样,这样保证了每个定时器都是独一无二的,然后每次要生成定时器时先判断这个定时器是否存在,如果存在则先清除定时器,然后再产生该定时器。如果不存在,则生成该定时器。
这样保证了不会累加,也不会相互之间影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值