【发布时间】:2018-08-03 12:38:57
【问题描述】:
deferred.resolve() 是否要等到该行才完成?我的代码有效,但我无法判断 deferred.resolve() 是在图像完成加载后实际发生,还是在图像请求启动后但在完成加载之前执行。
test = function(deferred) {
$('<img src="https://upload.wikimedia.org/wikipedia/commons/7/72/%27Calypso%27_Panorama_of_Spirit%27s_View_from_%27Troy%27_%28Stereo%29.jpg">');
deferred.resolve();
};
$.when($.Deferred(test)).then(function() {
document.location = "https://stackoverflow.com/";
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
或者我需要像这样向图像添加负载处理程序吗?
test = function(deferred) {
$('<img src="https://upload.wikimedia.org/wikipedia/commons/7/72/%27Calypso%27_Panorama_of_Spirit%27s_View_from_%27Troy%27_%28Stereo%29.jpg">').on("load", function() {
deferred.resolve();
});
};
$.when($.Deferred(test)).then(function() {
document.location = "https://stackoverflow.com/";
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
我在添加 .on("load", handler) 时发现的问题是,如果图像由于某种原因无法加载,则 deferred.resolve() 永远不会执行。我使用错误的网址对此进行了测试。
我需要能够保证页面重定向在图片加载后发生,而且如果加载图片出错,图片不会阻止重定向的发生。
【问题讨论】:
-
也添加一个
.on("error")处理程序。 -
Does deferred.resolve() wait until the previous line completes?如果不是async,它会执行此操作,但会阅读您所说的您想要等待加载的内容,因此不会自动为您执行此操作。 -
@Keith 很高兴知道,谢谢!
-
@Archer 似乎可以解决我的问题。如果您将其作为答案提交,我会接受。谢谢!
-
我已经链接了一个已经回答相同问题的问题。很高兴你把它整理好了:)
标签: javascript jquery