【发布时间】:2013-03-12 14:25:51
【问题描述】:
尝试使用 $.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之后立即发生,无论你的@987654324内部是否有任何异步事件@ 完成。如果您没有在$.each中进行任何异步工作,则不需要延迟对象。 -
@KevinB - 这正是我认为正在发生的事情,只是不确定如何在触发打印机之前返回多个延迟
-
不相关,但你为什么要在一个最多只包含一个元素的 jQuery 对象上调用
.each()? -
我必须知道异步事件是什么,
$.each是同步的,这意味着printer在所有$.each完成之前无法运行。 -
@AnthonyGrist - 把它当作代码,不好的例子 - 将编辑。
标签: jquery each jquery-deferred