Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在我们可以在JS中收听之前发生的事件?_Javascript_Html_Ecmascript Harmony - Fatal编程技术网

Javascript 在我们可以在JS中收听之前发生的事件?

Javascript 在我们可以在JS中收听之前发生的事件?,javascript,html,ecmascript-harmony,Javascript,Html,Ecmascript Harmony,我有一个图像事件处理代码如下 HTML <!DOCTYPE html> <html> <head> <title>Promise DEMO</title> </head> <body> <img src="someImagePath.jpg" class="img-1"/> </body> </html> 在什么情况下,在我开始听之前,这些事件可能会发生 目的

我有一个图像事件处理代码如下

HTML

<!DOCTYPE html>
<html>
<head>
    <title>Promise DEMO</title>    
</head>
<body>
<img src="someImagePath.jpg" class="img-1"/>
</body>
</html>
在什么情况下,在我开始听之前,这些事件可能会发生


目的是理解为什么我应该使用承诺。

一般来说,javascript中的事件(包括DOM更改)是完全异步的,因此将侦听器绑定到对象的时间点可以发生在事件发生之前或之后

简单的例子:

  • 浏览器开始构建文档
  • 在DOM流中找到并放置图像标记
  • 图像源在后台下载
  • 找到Javascript,正在开始执行
  • 图像源已加载
  • 找到Javascript事件侦听器绑定
  • 映像已加载,没有更多要侦听的加载事件
  • 有关这些场景以及使用承诺如何解决这些问题的更详细说明,请访问以下链接:


    此代码之前可以加载图像。我们不知道你什么时候运行它。@zerkms ok,所以可能图像已经加载,我的JS代码仍在添加事件处理程序。如果这是一个拼写错误,我深表歉意。你还没有解释调用JS的方式、地点和时间。听起来确实像是缓存了图像,在这种情况下,加载事件通常会在浏览器读取图像时触发(不过,这取决于浏览器,但大多数情况下是这样做的),如果JS位于页面底部,则不会看到此事件。通过清除浏览器缓存,可以轻松测试是否存在这种情况。您可以找到jquery。
    var img1 = document.querySelector('.img-1');
    
    img1.addEventListener('load', function() {
      // woo yey image loaded
    });
    
    img1.addEventListener('error', function() {
      // argh everything's broken
    });