没有ajax调用可以使用jQuery的.when吗?

时间:2012-10-13 22:48:01

标签: javascript jquery jquery-deferred

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”方法是否正确使用?

1 个答案:

答案 0 :(得分:3)

你没有把正确的事情传递给setTimeout()。这不起作用,因为您立即调用dfd.resolve()并将结果传递给此行中的setTimeout()

setTimeout(dfd.resolve(), 10000);

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

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

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