将Deferreds数组传递到$.When()

将Deferreds数组传递到$.When()

下面是一个虚构的例子:http://jsfiddle.net/adamjford/YNGcm/20/

HTML:

<a href="#">Click me!</a><div></div>

JavaScript:

function getSomeDeferredStuff() {
    var deferreds = [];

    var i = 1;
    for (i = 1; i <= 10; i++) {
        var count = i;

        deferreds.push(
        $.post('/echo/html/', {
            html: "<p>Task #" + count + " complete.",
            delay: count        }).success(function(data) {
            $("div").append(data);
        }));
    }

    return deferreds;}$(function() {
    $("a").click(function() {
        var deferreds = getSomeDeferredStuff();

        $.when(deferreds).done(function() {
            $("div").append("<p>All done!</p>");
        });
    });});

我要“全部完成!”在所有延迟任务完成后出现,但是$.when()似乎不知道如何处理延迟对象数组。“都完了!”首先发生的原因是数组不是延迟对象,因此jQuery继续并假设它刚刚完成。

我知道可以将对象传递到函数中,比如$.when(deferred1, deferred2, ..., deferredX)但目前还不清楚,在我试图解决的实际问题中,有多少延迟对象将被执行。


鸿蒙传说
浏览 784回答 3
3回答

素胚勾勒不出你

您可以应用when方法添加到数组中:var&nbsp;arr&nbsp;=&nbsp;[&nbsp;/*&nbsp;Deferred&nbsp;objects&nbsp;*/&nbsp;];$.when.apply($,&nbsp;arr);如何处理jQueryDeferreds数组?
打开App,查看更多内容
随时随地看视频慕课网APP