2012-08-07 207 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

相关问题