試圖使用$ .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(){...}
想想看,你總是解決它返回它之前,所以'.done'在調用'writer'之後總是會立即發生,無論您的'.each'中是否存在異步事件。如果你沒有在'$ .each'中做任何異步工作,你不需要延遲對象。 – 2013-03-12 14:30:43
@KevinB - 這正是我想到的情況,只是不確定如何在觸發打印機之前返回多個延遲() – Jason 2013-03-12 14:35:25
無關,但爲什麼要在最多隻能包含最多的jQuery對象上調用'.each()'一個元素? – 2013-03-12 14:36:06