jQuery / Javascript延迟执行函数直到几个函数完成

时间:2012-08-07 18:35:40

标签: javascript jquery

我有一个棘手的情况。我需要延迟执行函数,直到完成几个函数。虽然以下情况适用于正常情况:

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

我的情况有点不同。我不希望传递给$.when()的函数立即执行。 foo1-3将在不久的将来通过其他方法执行。换句话说,我想在我选择的时候手动执行foo1-3。只有在foo1-3执行后(没有特定顺序)才会foo4运行。

我的直觉告诉我要深入$.Deferred(),但我还没有找到我需要的东西。有什么想法吗?

2 个答案:

答案 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/

答案 1 :(得分:2)

制作一个记分板变量,在每个函数完成时计数,然后在每个函数后调用foo4。如果分数没有计入到正确的值,foo4应该退出。