dispatchEvent是同步还是异步功能

时间:2013-03-07 17:27:32

标签: javascript javascript-events windows-store-apps winjs

我正在尝试为WinJS中的自定义事件编写事件处理程序。我不太确定这在IE中是如何工作的 - 我正在创建一个自定义事件并发送它 -

var eventObject = document.createEvent("CustomEvent");
eventObject.initCustomEvent("dropbomb", true, true, null);
this._element.dispatchEvent(eventObject);

我的处理程序是 -

this._element.addEventListener("logtelemetry", function () {
                console.log("boom");
});

我可以确定将同步调用处理程序而不是稍后调用吗?如果是,那么证据是什么。

2 个答案:

答案 0 :(得分:20)

保证同步,因为:

  

dispatchEvent的返回值表示是否有任何   处理该事件的监听器名为preventDefault。

由于返回值指示是否有任何处理该事件的侦听器名为preventDefault,因此该方法必须阻塞(不返回),直到所有侦听器都执行完为止,这是同步调用的定义。

上述引文摘自the dispatchEvent specification in DOM Level 2 Events,并于2000年11月获得“推荐”状态(标准).Internet Explorer符合此标准since at least IE 9

要自行验证,请在console.log电话后立即添加.dispatchEvent声明,并注意始终首先记录"boom"(来自您的事件处理程序)。

答案 1 :(得分:1)

将使用WinJS.Utilities.eventMixin的默认实现立即调用处理程序。没有延期。

您的个人处理程序可以选择使用setTimeout / setImmediate / setInterval / requestAnimationFrame或其他一些自定义滚动来执行延期工作实施

请注意,如果您正在讨论DOM事件,请他们冒泡DOM元素树 - 我不是100%明确(可能有人可以在这里添加特定事件)