【问题标题】:Does deferred.resolve() wait until the previous line completes? [duplicate]deferred.resolve() 会等到上一行完成吗? [复制]
【发布时间】: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/";
});
&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"&gt;&lt;/script&gt;

或者我需要像这样向图像添加负载处理程序吗?

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/";
});
&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"&gt;&lt;/script&gt;

我在添加 .on("load", handler) 时发现的问题是,如果图像由于某种原因无法加载,则 deferred.resolve() 永远不会执行。我使用错误的网址对此进行了测试。

我需要能够保证页面重定向在图片加载后发生,而且如果加载图片出错,图片不会阻止重定向的发生。

【问题讨论】:

  • 也添加一个.on("error") 处理程序。
  • Does deferred.resolve() wait until the previous line completes? 如果不是async,它会执行此操作,但会阅读您所说的您想要等待加载的内容,因此不会自动为您执行此操作。
  • @Keith 很高兴知道,谢谢!
  • @Archer 似乎可以解决我的问题。如果您将其作为答案提交,我会接受。谢谢!
  • 我已经链接了一个已经回答相同问题的问题。很高兴你把它整理好了:)

标签: javascript jquery


【解决方案1】:

load事件是异步的,为了保证图片加载完成后执行下一行,确实需要添加handler。

更多信息请看这里, jQuery .load(function) synchronous

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-11
    • 2021-05-12
    • 2023-04-09
    • 1970-01-01
    • 2017-01-24
    相关资源
    最近更新 更多