2012-08-07 5 views
1

까다로운 상황이 있습니다. 여러 함수가 완료 될 때까지 함수의 실행을 지연시켜야합니다. 다음은 정상적인 상황에서 작동합니다.jQuery/Javascript 지연 여러 함수가 완료 될 때까지 함수 실행

$.when(foo1(), foo2(), foo3()).then(function(){ 
     //foo4(); 
    }); 

내 상황은 약간 다릅니다. $.when()에 전달 된 함수가 즉시 실행되기를 원하지 않습니다. foo1-3은 다른 방법으로 가까운 장래에 어느 시점에서 실행됩니다. 즉, 제가 선택한 시점에 수동으로 foo1-3을 실행하고 싶습니다. foo1-3이 실행 된 후에 만 ​​(특정 순서없이) foo4이 실행됩니다.

내 직감은 $.Deferred()을 파헤 쳐다 보면서 말했지만, 내가 필요한 것을 찾지 못했습니다. 어떤 아이디어?

+1

당신은 '그 때는 의미했다 (foo4)', 맞죠? 그렇지 않으면'foo4()'에 의해 반환 된 값을'.then()'에 전달하고 있습니다 ... –

+0

나는 그것을 헷갈 리지 않도록 편집했습니다. 그러나 네, 맞습니다. –

답변

3

fooX 함수는 $.when으로 전달되는 지연을 해결해야합니까?

var d1 = $.Deferred(); 
var d2 = $.Deferred(); 
var d3 = $.Deferred(); 

function foo1() { 
    // do normal work, then 
    d1.resolve(); 
} 

// same for other 2 functions 

$.when(d1, d2, d3).then(foo4); 

http://jsfiddle.net/mattball/nVFnv/

+0

이것이 내가 원하는 것입니다. 고맙습니다! –

2

각 함수가 완료 될 때마다 카운트 업하는 스코어 보드 변수를 만든 다음 각 함수 다음에 foo4를 호출하십시오. 점수가 올바른 값으로 계산되지 않으면 foo4가 종료되어야합니다.

+0

나쁘지 않다. 나는 그 생각을 스스로 가지고 있었다. 좀 더 우아한 것을 찾고있었습니다. 그러나, "후크 또는 도둑에 의한"확실히 선택 사항입니다. –

+0

Matt Ball의 대답은 근본적으로 당신의 생각이며, 스코어 보드 변수 대신에 지연된 객체를 사용하는 것입니다. 감사! –

관련 문제