티스토리 뷰
자바스크립트(javascript)
[node/javascript] 타이머 그룹관리(강제종료 및 재실행) with setTimeout
개발자 고포고 2024. 2. 13. 18:42반응형
[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
반응형
'자바스크립트(javascript)' 카테고리의 다른 글
기존 프로젝트-클리커- 리뉴얼 준비(기존:nestjs/react/typeorm)->? (기존코드 포함) (0) | 2024.03.05 |
---|---|
[server/client] SSR / CSR 한 줄 설명 (0) | 2024.02.27 |
[nestjs/typescript] nestjs에서 service에서 다른 service 사용하기 (1) | 2024.01.02 |
[javascript/node/window] 윈도우에서 node 자동실행(서비스등록) (1) | 2023.12.26 |
[react/shell] react실행 시 포트바꾸기 (0) | 2023.12.18 |
댓글
반응형