在我们可以用JS听之前发生的事件?

时间:2013-12-24 05:37:07

标签: javascript html5 ecmascript-harmony

我的图像事件处理代码如下

HTML

<!DOCTYPE html>
<html>
<head>
    <title>Promise DEMO</title>    
</head>
<body>
<img src="someImagePath.jpg" class="img-1"/>
</body>
</html>

的JavaScript

var img1 = document.querySelector('.img-1');

img1.addEventListener('load', function() {
  // woo yey image loaded
});

img1.addEventListener('error', function() {
  // argh everything's broken
});

在我开始收听事件之前,事件可能发生的情况会怎样?

目的是明白为什么我应该使用承诺。

1 个答案:

答案 0 :(得分:1)

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

简单示例:

  1. 浏览器开始构建文档
  2. 找到并放置在DOM流中的图像标记
  3. 在后台下载图片源
  4. 找到Javascript,开始执行
  5. 已加载图片来源
  6. 找到Javascript事件侦听器绑定
  7. 已加载图片,无需再收听加载事件
  8. 有关这些方案以及如何使用promise解决这些问题的更详细解释,请访问以下链接:

    http://www.html5rocks.com/en/tutorials/es6/promises/