2

http://jsfiddle.net/f4hmL/235/

function showData() {
    alert("boop!");
}

function method1() {
    var dfd = $.Deferred();
    setTimeout(dfd.resolve(), 10000);
    return dfd.promise();
}

function method2() {
    var dfd = $.Deferred();
    setTimeout(dfd.resolve(), 6000);
    return dfd.promise();
}

$.when(method1(), method2()).then(showData);​

我希望只在两个延迟对象都解决时才看到“boop”,但我立即看到了。有可能实现这一目标吗?jQuery 的“when”方法是正确的函数吗?

4

1 回答 1

3

您没有将正确的东西传递给setTimeout(). 这不起作用,因为您正在dfd.resolve()立即调用并将结果传递给setTimeout()这一行:

setTimeout(dfd.resolve(), 10000);

相反,你需要这样的东西:

setTimeout(function() {dfd.resolve()}, 10000);

在超时触发之前不会调用解析。

于 2012-10-13T22:50:38.177 回答