我有一个棘手的情况。我需要延迟执行函数,直到完成几个函数。虽然以下情况适用于正常情况:
$.when(foo1(), foo2(), foo3()).then(function(){
//foo4();
});
我的情况有点不同。我不希望传递给$.when()
的函数立即执行。 foo1-3
将在不久的将来通过其他方法执行。换句话说,我想在我选择的时候手动执行foo1-3
。只有在foo1-3
执行后(没有特定顺序)才会foo4
运行。
我的直觉告诉我要深入$.Deferred()
,但我还没有找到我需要的东西。有什么想法吗?
答案 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);
答案 1 :(得分:2)
制作一个记分板变量,在每个函数完成时计数,然后在每个函数后调用foo4。如果分数没有计入到正确的值,foo4应该退出。