jQuery $ .Deferreds和$ .each

时间:2013-03-12 14:25:52

标签: jquery each jquery-deferred

尝试使用$ .Deferreds代替我之前使用的setTimeOut。 我遇到了一个问题,因为writer()实际上并没有完成,因为$ .each在调用printer()时仍然循环。

我还没有看到带循环的$ .Deferreds示例。显然以下是错误的,我认为它与决心有关 - 任何帮助都将受到赞赏。

$.when( writer() ).done(function() {
    printer();
});


function writer(){
    var deferred = new $.Deferred();
    if(x){
        $("a").each(function () {...});
    }
    if(y){
        $("img").each(function () {...});
    }
    if(z){
        $("div").each(function () {...});
    }
    deferred.resolve();
    return deferred.promise();

}

function printer(){...}

1 个答案:

答案 0 :(得分:0)

假设...内的.each正在执行异步事件,您将需要所有这些异步事件来返回一个延迟对象,您可以将其传递给$.when来触发你的决心。

此外,在代码顶部,单个回调不需要$.when,只需执行writer().done(function(){...})