1

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

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

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

我的直觉告诉我要深入$.Deferred()研究,但我还没有完全找到我需要的东西。有任何想法吗?

4

2 回答 2

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/

于 2012-08-07T18:40:27.677 回答
2

创建一个计分板变量,在每个函数完成时计数,然后在每个函数之后调用 foo4。如果分数没有计算到正确的值,则 foo4 应该退出。

于 2012-08-07T18:38:45.707 回答