2012-04-11 9 views
0

jquery의 각 함수로 작업 중이며 완료되기 전에 각 루프의 결과가 필요한 함수로 이동하는 것처럼 보입니다. 코드 내가 경고 ("테스트")의 주석 경우계속하기 전에 각 .each가 끝날 때까지 기다리는 중입니다. (jquery)

$.each(array, function(index, value) { 
    prob[value] = get_probs(value); 
}); 

sim(prob); 

function sim(prob){ 
    //alert ("test"); 
    alert (prob[value]); 
    new_sim(prob[value]); 
} 

이다; 피스는 분명히 경고를 표시 할 것이고 두 번째 경고에 적절한 번호를 표시 할 것입니다. 그러나 그대로두면 정의되지 않은 상태로 되돌아옵니다. 그 이유는 다음과 같은 sim 함수를 사용했기 때문입니다. 각 루프를 완료

어쨌든 나는 각 루프가 끝날 때까지 실행을 기다리는 시뮬레이션 기능을 얻을 수 있습니까?

참고 : 이보다 더 많은 코드가 있지만 단순화하려고 시도했습니다 ... 불분명 한 것이 있으면 알려주세요. 나는 결국 sim 함수를 여러 번 실행하려고합니다. 이것이 내가 이것을 이렇게 설정하려고하는 이유입니다.

어떤 도움을 주셔서 감사합니다!

+6

'get_probs' 또는 일부 다른 코드가 AJAX 요청을하거나 다른 비동기 작업을 수행한다고 가정합니다. –

+0

이 맞습니다. 난 그냥 동 기적으로 (async : false) 실행되도록 전환했고 작동하는 것처럼 보입니다. 다른 방법으로이 작업을 수행 할 수 있습니까? 그래서 브라우저를 잠그지 마십시오. –

+1

AJAX 응답에 의존하는 코드는 모두 'success :'콜백에서 실행해야합니다. 하나의 옵션은'get_probs' * (AJAX가있는 곳이라고 가정) *에 인수로 함수를 넘기고 * 다음 콜백 내에서 그 함수를 호출하여 응답을 전달하는 것입니다. 그렇지 않으면 funciton을 전달하는 대신 코드를 콜백에 하드 코딩 할 수 있습니다. –

답변

0

각 루프는 순차적으로 실행되어야하며 완료 될 때까지 실행해야합니다.

방법이 코드를 실행하는 방법에 대한 : get_probs의 성공 콜백 내부

sim(prob); 

function sim(prob){ 
    //alert ("test"); 
    alert (prob[value]); 
    new_sim(prob[value]); 
} 

, 동기화를 아약스 호출은 대답 결코 없습니다.

+1

또한 모든 목적과 목적을 위해 JavaScript는 단일 스레드이므로 언급하지 말아야합니다 (Ajax는 제쳐두고 호출합니다) –

+0

이 경우를 제외하고는 get_probs 함수가 AJAX를 수행하는 것처럼 보입니다 그래서 AJAX 호출이 시작되기 전에 각 함수가 매우 빨리 (AJAX 호출을 시작하여) sim()을 실행합니다. –

+0

ya, 내가 위에서 언급 한 것처럼 get_probs에 ajax 호출이 있습니다. async : false로 설정하고 작동하지만 두 번째 또는 두 번째 브라우저를 잠 그려면 이상적이지 않습니다. 다른 방법이 있습니까? –

관련 문제