var _interval = setInterval(func,120000);
setInterval 함수를 이용하면 특정 시간마다 함수를 실행할수 있는데
함수등록시 시간값이 고정으로 들어가기 때문에 일정한 시간 간격을 두고 실행되기
때문에 내가 원하는 결과를 얻을수 없었다.
그럼 어떻게 해야하는가?
1.먼저 랜덤 시간을 리턴 하는 함수를 하나 만든다.
난 2분안짝으로 초로 리턴 하게끔 했다.
//0~120초 사이 리턴 랜덤 초
function getRandSec(){
return Math.floor(Math.random() * 120) + 1;
}
2. 그리고 2분마다 실행하는 인터벌 함수를 정의한다.
var _interval = setInterval(targetFunction,120000);
3.실행할 함수 내에서 setTimeout 으로 실행하되 시간 값을 랜덤으로 준다.
function targetFunction(){
var sec = getRandSec();
console.log(sec);
if(_autoStartStatus){
setTimeout(function(){
//여기가 실제로 실행되는 비지니스 로직.
}, sec*1000);
}
}
정리.
인터벌 함수를 통해 targetFunction 함수를 2분마다 실행하고 실행된 targetFunction 함수 내에서 setTimeout 함수로 일정시간뒤에 비지니스 로직을 수행하는데 시간값을
getRandSec() 를 통해서 1~120 초 사이를 얻는다.
경고.
랜덤으로 얻는 시간 값의 범위 최대값이 인터벌 파라미터로 넣는 시간값보다 작거나 같아야 한다.
댓글 없음:
댓글 쓰기