길이가 5인 배열이 있다고 가정하고
var arr = [1,2,3,4,5];
일정 주기를 가지고 리스트의 안의 데이터를 순차적으로 꺼내 무언가의 기능을 실행해야할 경우
for(var i in arr){
(function(index){
setTimeout(function(){
console.log(arr[index]);
},5000);
})(i)
}
위와같이 자가 실행함수를 이용해서 했으나
5초뒤에 1,2,3,4,5 가 한번에 출력되어 원하는 결과를 얻지 못했다.
var arr = [1,2,3,4,5];
var inter;
for(var i in arr){
(function(index){
inter = setInterval(function(){
console.log(arr[index]);
},5000);
})(i)
clearInterval(inter);
}
위와 같은 코드도 역시 안됨 (콘솔자체가 찍히지 않음)
갖가지 방법을 동원해 봤지만 하드코딩으로 하지 않는한 for 루프를 이용해서
원하는 결과를 얻는것은 불가능 했다.
* 해결방법
for 루프를 걷어내고 재귀 함수를 이용하여 반복실행을 하게끔 한후 setTimeout 으로
간격을 줌.
var arr = [1,2,3,4,5];
//자가 실행함수 초기 파타미터 0 을 받는다.
(function forLooper(i) {
setTimeout(function() {
//console.log(arr[i]);
// i 값에 1을 더한후 길이 체크를 한다.
if ( arr.length > ++i ){
//배열의 다음 인덱스 값에 접근하기 위해 재귀호출
forLooper(i);
}else{
//배열의 인덱스 값을 5초마다 console.log 를 통해 출력후
//후행되어야 할 로직이 있다면 이부분에 추가.
}
}, 5000)
})(0); //처음 시작값으로 0 을 넘김.
삽질한 결과 해결.
퍼가실때 댓글좀 달아주세용~~~~
피드 구독하기:
댓글 (Atom)
[lunux]리눅스 폴더별 용량 확인
리눅스 폴더별 용량 확인 조회 하고자 하는 디렉토리 리스트가있는 경로로 이동후 du -h --max-depth=1
-
pom.xml <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId&g...
-
수십대의 서버에 특정 쉘을 실행한다거나 파일을 수정해야할경우 호스트 입력 아이디 입력 패스워드 입력은 여간 짜증나는일이 아닐수 없다. 이를 한방에 해주는 방법 teraterm 를 설치한다( putty 는 버리자 ) 예를 들면 19...
-
다른 페이지로 이동 해서 프로세스 실행후 다시 이전 페이지로 돌아와야할경우 page url 을 파라미터로 넘겨야 하는데 location.protocol : 프로토콜 예) https: location.host : 도메인 예) naver.com l...
댓글 없음:
댓글 쓰기