var cancellable = function(fn, args, t) {
fn(...args)
const ID = setInterval(fn, t, ...args)
return function cancelFn() {
clearInterval(ID);
}
};
일단 문제의 요구사항을 살펴보면 아래와 같다.
- 함수
fn
, 전달인자 배열args
, 인터벌시간t
가 주어질때, 취소함수cancelfn
를 리턴하라- 함수
fn
은 즉시 실행되야한다. 그리고 매t
밀리초마다 실행되어야한다.간추려보면 함수
fn
을t
밀리초마다 실행하라는 것이다. 따라서 setInterval() 메소드를 사용해서 해결하기로했다.
setInterval() 메소드는
1. delay마다 실행될 함수
2. delay 시간
3. delay마다 실행될 함수에 전달될 인자
이렇게 3종류의 파라미터를 가진다. 따라서fn
,t
,args
를 순서대로 전달인자로 전달하면된다.
이 때 반환되는 값은 타이머를 식별하는 고유한 숫자 값이다. 이 값을 이용해서 인터벌을 취소할 수 있다.
clearInterval() 메소드에 이 값을 전달해서 취소할 수 있다. 따라서, 리턴되는cancelfn
안에 취소 코드를 작성하면 된다.
여기서 주의할 점은 setInterval() 메소드는 호출 후 delay 시간이 한 번 지난 후 처음으로 콜백함수가 실행된다. 그래서 메소드를 호출하기전에 한 번 직접 호출해줘야한다.