2012-08-07 196 views
1

我有一個棘手的情況。我需要延遲一個函數的執行,直到幾個函數完成。雖然以下情況可以在正常情況下使用:jQuery/Javascript延遲執行一個函數,直到完成幾個函數

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

我的情況有點不同。我不希望傳遞給$.when()的函數立即執行。將在不久的將來通過其他方法在某個時間點執行foo1-3。換句話說,我想在我選擇的時候手動執行foo1-3。只有foo1-3已經執行(沒有特定的順序)將運行foo4

我的直覺告訴我要深入探索$.Deferred(),但我還沒有完全找到自己需要的東西。有任何想法嗎?

+1

你的意思是'。然後(foo4)',對吧?否則,您將'foo4()'返回的值傳遞給'.then()'... – 2012-08-07 18:44:14

+0

我編輯它以避免淹沒。但是,是的,你是對的。 – 2012-08-07 18:49:09

回答

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

這就是我要找的。謝謝! – 2012-08-07 18:42:57

2

製作一個計分板變量,每個函數完成後計數,然後在每個函數之後調用foo4。如果得分沒有達到正確的值,foo4應該退出。

+0

好的。不錯。我自己有這個想法。正在尋找更優雅的東西。但是,「胡言亂語」當然是一種選擇。 – 2012-08-07 18:42:06

+0

Matt Ball的答案基本上就是你的想法,只是使用延期對象而不是記分牌變量。謝謝! – 2012-08-07 18:46:20

相關問題