티스토리 뷰

반응형

[node/javascript] 타이머 그룹관리(강제종료 및 재실행) with setTimeout 

 

// 그룹별 타이머 ID를 저장할 객체
const timerGroups = {};

// 타이머를 설정하고 그룹에 추가하는 함수
function setGroupedTimeout(groupName, callback, delay) {
  const timerId = setTimeout(callback, delay);
  // 해당 그룹이 존재하지 않으면 새로운 배열을 생성
  if (!timerGroups[groupName]) {
    timerGroups[groupName] = [];
  }
  timerGroups[groupName].push(timerId);
  return timerId;
}

// 특정 그룹의 모든 타이머를 취소하는 함수
function clearGroupTimers(groupName) {
  if (timerGroups[groupName]) {
    timerGroups[groupName].forEach(timerId => clearTimeout(timerId));
    delete timerGroups[groupName]; // 그룹 삭제
  }
}

// 특정 그룹에서 특정 타이머만 다시 실행하는 함수
function restartGroupTimer(groupName, timerId, callback, delay) {
  // 해당 그룹에서 타이머 ID 찾기
  if (timerGroups[groupName] && timerGroups[groupName].includes(timerId)) {
    // 기존 타이머 취소
    clearTimeout(timerId);
    // 리스트에서 해당 타이머 ID 제거
    timerGroups[groupName] = timerGroups[groupName].filter(id => id !== timerId);
    // 타이머 다시 설정
    setGroupedTimeout(groupName, callback, delay);
  }
}

// 예시 사용
setGroupedTimeout("group1", () => console.log("그룹 1, 3초 후 메시지"), 3000);
setGroupedTimeout("group1", () => console.log("그룹 1, 5초 후 메시지"), 5000);
setGroupedTimeout("group2", () => console.log("그룹 2, 4초 후 메시지"), 4000);

// 필요한 경우 특정 그룹의 모든 타이머 취소
// clearGroupTimers("group1");

// 특정 그룹의 특정 타이머를 다시 시작하고 싶다면, 해당 groupName, timerId, 새로운 콜백, 지연 시간을 넘겨주면 돼.
// restartGroupTimer("group1", timerId, () => console.log("다시 설정된 타이머"), 4000);

 

 

#javascript #node #timer #setTimeout

반응형
댓글
반응형