Handling time intervals in JavaScript - Lee-hyuna/33-js-concepts-kr GitHub Wiki
Handling time intervals in JavaScript
Electron app Formolectron์์ ์์
ํ๋ ๋์ ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ์ setInterval() ํจ์๋ฅผ ํตํด ๋ค๋ฅธ ์๊ฐ ๊ฐ๊ฒฉ์ ๋ค๋ฃฐ ํ์๊ฐ ์์์ต๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋ด ์ฑ์ ์ธ ๊ฐ์ ํ์ด๋จธ๋ฅผ ๊ตฌํํด์ผ ํ์ต๋๋ค.
- Pomodoro of 25 minutes
- Short break of 5 minutes
- Long break of 10 minutes
์ธ ๊ฐ์ง ๊ฒฝ์ฐ ๋ชจ๋ ์นด์ดํธ ๋ค์ด ํ์ด๋จธ๋ฅผ ๊ตฌํํ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์๊ฐํ ์ ์์ต๋๋ค.
ํ๋๋ ์ธ ๊ฐ์ง ๋ค๋ฅธ setInterval()
์ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ํ์ด๋จธ๋ฅผ ๊ตฌํํ๋ ๊ฒ์
๋๋ค.
๋์งธ๋ก๋ ์ธ ํ์ด๋จธ ๋ชจ๋ ๋์ผํ setInterval()
์ ํ์ฉํ ์ ์๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฐพ๋ ๊ฒ์
๋๋ค.
๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก๋ ์ข์ต๋๋ค.
ServiceWorker๋ฅผ ์ฌ์ฉํ์ฌ simple offline-capable Notepad app ๋ง๋ค๊ธฐ
Solution(ํด๊ฒฐ์ฑ )
๊ทธ๋์, ๋๋ ๋ ๋ฒ์งธ ์ ๊ทผ๋ฒ์ ์ฌ์ฉํ์ต๋๋ค.
์๋์ ๊ฐ์ ๋ณ์์ ํ ๋นํ์ฌ ์ธ ๊ฐ์ ํ์ด๋จธ ๋ชจ๋์ ๋์ผํ setInterval()
์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
var pomodoroIntervalId;
function startTimer(duration, display) {
timer = duration;
pomodoroIntervalId = setInterval(function(){
if (--timer < 0) {
timer = duration;
}
minutes = parseInt(timer/60, 10);
seconds = parseInt(timer%60, 10);
minutes = minutes < 10 ? '0'+minutes : minutes;
seconds = seconds < 10 ? '0'+seconds : seconds;
display.textContent = minutes+ ":" + seconds;
if(minutes == 0 && seconds == 0){
notifyUser();
}
}, 1000);
}
๋จผ์ clearInterval()๋ฉ์๋๋ก interval ID๋ฅผ ์ ๋ฌํ์ฌ ํ์ฌ ์๊ฐ ๊ฐ๊ฒฉ์ ํด๋ฆฌ์ดํจ์ผ๋ก์จ ๋ค๋ฅธ ํ์ด๋จธ ๊ฐ์ ๋์ผํ startTimer()๋ฅผ ํ์ฉํฉ๋๋ค. ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ์๋ ์ ์ญ๋ณ์ pomodoroIntervalId์ ํ ๋น ํ์ต๋๋ค. ์ด๊ฒ์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฌ ์คํ์ค์ธ interval์ ์ญ์ ํ์ฌ ๋ค์์ ๋ค๋ฅธ ํ์ด๋จธ๊ฐ ์ค์ ๋ ๋ ํ์ฉํ ์ ์๋๋ก ํฉ๋๋ค. ์ฝ๋๋ ์๋์ ๊ฐ์ต๋๋ค.
function resetTimer() {
clearInterval(pomodoroIntervalId);
}
์ด๋ ๊ฒํ๋ฉด ์ฝ๋๋ฅผ ๊นจ๋ํ๊ณ ๋งค๋๋ฝ๊ฒ ๋ง๋ค๋ฉฐ ๋์ผํ setInterval() ํจ์๋ฅผ ์ฌ์ฉ ํ ์์๋ ์ด์ ์ด ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ ๋ง ํธ๋ฆฌํ ๊ธฐ๋ฅ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.