2016-08-19 3 views
0

setIntervals를 많이 실행하려고합니다. 더 효율적인 방법이 있습니다. 그러나 그것은 길 아래에있다.setInterval ID를 매개 변수 함수로 구문 분석

내가 할 수있는 방법이 있습니까?

var a = setInterval(function(a){ 
    console.log(a); 
    clearInterval(a); 
}, 1000, a); 

그래서 ID가 함수 자체로 구문 분석, 나는 늘 이런 식으로 다시 선택을 취소 ID를 저장해야합니다.

+2

아마도 [setTimeout] (http://stackoverflow.com/questions/13686867/setinterval-and-clearinterval-how-to-run-only-1-time)을 사용할 수 있습니까? –

+0

제안을 주셔서 감사 드리며 작동 하겠지만 몇 가지 빠른 변경을 테스트 중이므로 서브 루프보다는 기본 루프로 한 세트 간격 만 사용하는 것이 더 효율적이게 될 것입니다. – Robinlemon

답변

1

두 가지 옵션이 있습니다.

재귀에서는 setTimeout :

function doTheJob() { 
    console.log("I'm working") 
    setTimeout(doTheJob, 1000) 
} 
범위 변수 (ID)를 떠나는

단순하여 setInterval :

var id = setInterval(function() { 
    console.log("I'm working") 

    if(something) 
    clearInterval(id) 
}, 1000) 
+0

'.bind (this) '는 정확히 무엇입니까? 함수의 어휘 범위는'.bind '의 영향을받지 않습니다. –

+0

두 번째 해법은'.bind (this)'가 없으면 똑같이 작동합니다. 'bind'는 함수의'this' 값을 설정합니다. 함수 안에서'this'를 사용하지 않으므로 값이 무엇으로 설정되었는지는 중요하지 않습니다. 'this'와 scope를 혼동하지 마십시오. –

+0

감사합니다. 이미 알아 냈습니다. 내가 setTimeout 및 setInteval 전에 범위를 변경 내기 =) – Lazyexpert

2

당신이하는 도우미 함수를 작성할 수있는 :

function interval(f, timeout) { 
    const id = setInterval(() => f(id), timeout); 
} 

interval(a => { console.log(a); clearInterval(a); }, 1000); 
+0

의견을 보내 주셔서 감사 드리며 ES6을 사용해 주셔서 감사합니다. – Robinlemon

0
var a = []; 
a.push(setInterval(function(t){ 
    console.log(a[t]); 
    clearInterval(a[t]); 
}, 1000, a.length)); 

그같이하지 마라. 티.

+0

재미있는 아이디어, 좀 지저분하지만! 귀하의 제안에 감사드립니다! – Robinlemon

관련 문제