ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JavaScript] setTimeout
    WEBn/JavaScript 2021. 8. 7. 21:46

    끝이 보이지 않는 자바스크립트 

    하나씩 배우다 보면 기본기가 탄탄해질까 한다.

     

    오늘의 주제는 setTimeout

     

     

    setTimeout은 일정 시간이 지난 후에 원하는 함수를 예약 실행(호출)할 수 있게 한다.

     

     

    실시간 날씨 정보를 업데이트 해줘야 하는 문제가 생겨서

    주기적으로 갱신할 수 있는 방법을 찾다가 알게 되었다.

     


    문법은 이렇다.

    let timerId = setTimeout(function, [delay], [arg1], [arg2], ...)

    function 실행하고자 하는 함수 

    delay 실행하기 전 대기 시간이며 기본값은 0이다, 단위는 밀리초(millisecond)

    arg1, arg2  함수에 전달할 인수들

     

    예시가 있어야 이해가 잘가므로 바로 예시를 보자.

     

    기본 형태

    function hello() {
    	alert('Hello')
     }
    setTimeout(Hello, 1000);

    실행하면 1초 뒤에 Hello가 실행되어 알림창이 뜬다.

     

    인수를 넘겨줄 경우 아래와 같이 작성하면 된다.

    function condition(day, emotion) {
                alert(day + ' is ' + emotion);
            }
            setTimeout(condition, 1000, "Sunday", "good");

    실행하면 1초 뒤에 알림창에 Sunday is good이 출력된다.

     

    중첩 setTimeout

    일정시간을 간격으로 실행하는 방법도 있다. setInterval로 쉽게 할 수 있지만 setTimeout은 서버가 과부하 일 때 요청 간격을 조정할 수 있어 더 용이하다.

     

    let count = 0;
    
    function add() {
       count++;
       console.log(count);
       }
    
    setTimeout(function request() {
       add();
       setTimeout(request, 1000);
       }, 1000);

    중첩이란 말그대로 setTimeout 안에 request 함수를 선언하고 그 함수 안에 setTimeout을 통하여 다시 request함수를 1초마다 실행시키게 하였다. 처음 1초 뒤에 request 함수가 실행되고 나서 request 안의 setTimeout으로 인해 1초 뒤에 한번 더 request함수가 실행되어 count가 1 증가한다. 이후 1초마다 반복되어 count는 1씩 올라간다.

     

    count가 1씩 증가한는 것이 찍히고 있다.

     

    이런식으로 주기적으로 실행하는 함수를 만들 수 있다. 그리고 반복되는 시간을 정해줬지만 반복 주기를 변수로 한 다음에 서버가 과부화 됐을 때마다 요청 시간을 증가시키도록 만들 수 있다.

     

    let delay = 5000;
    
    let time = setTimeout(function request() {
      서버로 요청하기
      
      if(서버 과부하로 요청 실패시) {
      delay *= 2; // 요청 시간을 2배로 늘립니다.
      }
      
      time = setTimeout(request, delay);
    }, delay);

    서버 요청이 실패될 때마다 setTimeout의 주기(delay)가 2배씩 늘어난다.

     

    cleartTimeout()

    반복 실행을 하도록 했다면 멈춰야 할 일도 생길 것이다. setTimeout()을 멈추게 하는 함수가 바로 clearTimeout이다. 사용법은 간단하다. setTimeout을 표현식 사용하여 작성하고, 저장된 변수를 clearTimeout 안에 넣으면 된다.

     

    let time = setTimeout(...);
    clearTimeout(time);

    위와 같이 clearTimeout 함수를 호출하여 setTimeout을 중지시킬 수 있다.

     

     

    한줄 느낀 점

     

    자주 쓰게 될 함수 같다. 이런 자동화 기능이 바로 컴퓨터가 존재하는 이유라 생각한다. 화이팅 !

     

     

     

     

     

     

     

     

    댓글

Designed by Tistory.