2010-01-12 6 views
2

함수 배열을 통해 실행되는 for 루프가 있고 각 루프를 호출합니다. 이상적으로 나는 하나의 출력이 다른 출력의 결과에 영향을 줄 수 있으므로 특정 순서로 그들을 호출하고 싶습니다. 어쨌든 시간 간격이나 타이머를 설정하지 않아도됩니까?javascript for for pause

죄송합니다 ... 제가 조금 더 설명해야한다고 생각합니다. 제가 생각하기에 예를 들어 때로는 아약스 성공을 기다려야 만한다는 것을 의미 할 수도 있습니다. (다른 시간은 아약스 성공을 기다릴 필요가 없다) 그래서 나는 성공 (success) {for the loop를 계속}과 같은 조건을 설정하고 싶다. 여기서 success는 루프의 각 부분의 성공에 대한 변수이다.

답변

6

자바 스크립트는 동기식으로 실행되므로 두 개의 기능을 동시에 실행할 수 없습니다. 올바른 순서로 실행하는 한 아무 문제가 없어야합니다.

당신은 XMLHttpRequest를 동 기적으로 실행되도록 설정할 수 있습니다 중 하나 아약스 응답을 기다리는 (그래서, 오히려 아약스보다 에이잭스) 또는 다음과 같이 작동 기능 반복자 어떤 종류의 설정 : 다음

var FunctionIterator = { 
    nextFunction: 0, 
    functionArray: [], 
    callNext: function() 
    { 
     this.functionArray[this.nextFunction].apply(null, arguments); 
     this.nextFunction++; 
    } 
} 

당신 의

FunctionIterator.functionArray.push(someFunctionName); 
FunctionIterator.functionArray.push(function (arg1) { alert(arg1); }); 

어쩌면
FunctionIterator.callNext(arg1, arg2, arg3); 

을 : 그것은 좋아 사용 elf-explanatory이지만 callNext 함수를 실행할 때마다 다음 함수가 호출되고 다음 함수 호출을 준비하기 위해 배열 인덱스가 1 씩 증가합니다.

+0

죄송합니다 ... 난 내가 난 가끔 내가 계속할 전에 아약스의 성공을 위해 기다려야 할 것입니다 의미 아약스를 사용할 수 있습니다 생각하고있는 예 .. 좀 더 설명해야 같아요. (다른 시간 내가 아약스 성공을 기다릴 필요가 없다) 그래서 나는 (성공) {계속 for 루프}와 같은 조건을 설정하고 싶습니다. 성공은 루프의 각 부분의 성공에 대한 변수 세트입니다. – salmane

+0

Salmane, 위의 설명을 반영하도록 질문을 편집하십시오. 또한 일부 예제 코드가 유용 할 수 있습니다. – Jamie

+0

@salmane : 스크립트 실행을 지연시켜야하는 동기식 xhrs 만 사용할 수 있습니까? 내 업데이트 답변을 참조하십시오. –

0

당신 비동기 실행 기능도 (코드를 완전히 테스트되지 않은, 단지 얻을 수있는 아이디어) 재귀 적으로 호출하도록 설정할 수있는 경우 : 당신이 당신의 배열에 많은 기능을 가지고있는 경우

var funcarr = []; 
function iterfuncs(arr){ 
    arr.pop()(); 
    if(arr.length >=1){ 
    iterfuncs(arr); 
    } 
} 

걱정 당신의 콜 스택에 관해서는 재귀 호출을 0의 타임 아웃으로 호출하도록 변경할 수있다. 이것은 호출 함수가 다음 호출이 실행되기 전에 리턴 할 수있게 해준다. 가난한 사람 꼬리 재귀.

window.setTimeout(function(){ iterfuncs(arr); },0);