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()。我用坏网测试了这个。
我需要能够保证在图片加载后页面重定向发生,而且如果加载图像时出错,图像也不会阻止重定向发生。
答案 0 :(得分:0)
load事件是异步的,为了确保在完成图像加载后执行下一行,确实需要添加处理程序。
有关详细信息,请参阅此处 jQuery .load(function) synchronous