javascript javascript-events windows-store-apps winjs

javascript - ¿Es dispatchEvent una sincronización o una función asíncrona?



javascript-events windows-store-apps (2)

El controlador se llamará de inmediato, utilizando la implementación predeterminada de WinJS.Utilities.eventMixin . No hay aplazamiento.

Sus manejadores individuales pueden elegir realizar trabajos diferidos utilizando setTimeout / setImmediate / setInterval / requestAnimationFrame , o alguna otra implementación personalizada.

Tenga en cuenta que si está hablando de eventos DOM, pidiéndoles que salten el árbol de elementos DOM, que no estoy 100% claro (tal vez alguien pueda agregar ese específico aquí)

Estoy tratando de escribir un controlador de eventos para un evento personalizado en WinJS. No estoy muy seguro de cómo funciona esto en IE. Estoy creando un evento personalizado y enviándolo.

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

Mi controlador es -

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

¿Puedo estar seguro de que el controlador se llamará en sincronización y no en un momento posterior? Si es así, ¿cuál es la prueba?


Se garantiza que será sincrónico porque:

El valor de retorno de dispatchEvent indica si alguno de los oyentes que manejaron el evento llamó preventDefault.

Como el valor de retorno indica si alguno de los oyentes que manejaron el evento llamó preventDefault, el método debe bloquear (no regresar) hasta que todos los oyentes hayan terminado de ejecutarse, que es la definición de una llamada síncrona.

La cita anterior es un extracto de la especificación dispatchEvent en DOM Level 2 Events , que alcanzó el estado de "Recomendación" (un estándar) en noviembre de 2000. Internet Explorer ha cumplido con este estándar desde al menos IE 9 .

Para verificarlo usted mismo, agregue una instrucción .dispatchEvent inmediatamente después de su llamada a .dispatchEvent y observe que "boom" (desde su controlador de eventos) siempre se registra primero.