dispatchEvent是同步还是异步功能

Anz*_*Anz 15 javascript javascript-events winjs windows-store-apps

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

var eventObject = document.createEvent("CustomEvent");
eventObject.initCustomEvent("dropbomb", true, true, null);
this._element.dispatchEvent(eventObject);
Run Code Online (Sandbox Code Playgroud)

我的经纪人是 -

this._element.addEventListener("logtelemetry", function () {
                console.log("boom");
});
Run Code Online (Sandbox Code Playgroud)

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

jar*_*obs 21

它保证是同步的,因为:

dispatchEvent的返回值指示是否有任何处理该事件的侦听器名为preventDefault.

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

以上引用摘自DOM Level 2 Events中的dispatchEvent规范,该规范在2000年11月获得了"推荐"状态(标准).Internet Explorer 至少从IE 9开始遵守此标准.

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


Dom*_*ton 2

该处理程序将立即使用WinJS.Utilities.eventMixin. 没有延期。

您的个人处理程序可以选择使用setTimeout//或其他一些自定义滚动实现来执行延迟工作。setImmediatesetIntervalrequestAnimationFrame

请注意,如果您正在谈论 DOM 事件,要求它们冒泡 DOM 元素树 - 我不是 100% 清楚(也许有人可以在此处添加具体内容)