0

尝试使用 $.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(){...}
4

1 回答 1

0

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

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

于 2013-03-12T14:28:48.147 回答