jQuery/Javascript延迟执行一个函数,直到完成几个函数
我有一个棘手的情况。我需要延迟一个函数的执行,直到几个函数完成。虽然以下情况可以在正常情况下使用:jQuery/Javascript延迟执行一个函数,直到完成几个函数
$.when(foo1(), foo2(), foo3()).then(function(){
//foo4();
});
我的情况有点不同。我不希望传递给$.when()
的函数立即执行。将在不久的将来通过其他方法在某个时间点执行foo1-3
。换句话说,我想在我选择的时候手动执行foo1-3
。只有foo1-3
已经执行(没有特定的顺序)将运行foo4
。
我的直觉告诉我要深入探索$.Deferred()
,但我还没有完全找到自己需要的东西。有任何想法吗?
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);
这就是我要找的。谢谢! – 2012-08-07 18:42:57
制作一个计分板变量,每个函数完成后计数,然后在每个函数之后调用foo4。如果得分没有达到正确的值,foo4应该退出。
好的。不错。我自己有这个想法。正在寻找更优雅的东西。但是,“胡言乱语”当然是一种选择。 – 2012-08-07 18:42:06
Matt Ball的答案基本上就是你的想法,只是使用延期对象而不是记分牌变量。谢谢! – 2012-08-07 18:46:20
你的意思是'。然后(foo4)',对吧?否则,您将'foo4()'返回的值传递给'.then()'... – 2012-08-07 18:44:14
我编辑它以避免淹没。但是,是的,你是对的。 – 2012-08-07 18:49:09