evento webglcontextcreationerror: ¿se desencadena sincrónicamente?

¿ El evento webglcontextcreationerror se desencadena de forma síncrona o asíncrona? Por ejemplo,

canvas.addEventListener("webglcontextcreationerror", function() { console.log("Error"); }); var context = canvas.getContext("webgl"); console.log("After creation"); 

en el caso de salida de error

 "After creation" "Error" 

o

 "Error" "After creation" 

?

No estoy seguro de cómo forzar este evento para descubrir la respuesta yo mismo.

NB : Esta no es una respuesta por especificación, sino solo de una sola prueba de UA, por lo que puede ser incorrecta, o al menos verdadera solo para este UA, también conocido como Chrome.


En Chrome, para forzar el evento de error, primero puede solicitar un 2dContext y luego un webgl.

De esta forma podemos ver que este UA trata el evento como uno sincrónico.
Solo aprendo sobre estos derecho ahora …

 var canvas = document.createElement('canvas') canvas.addEventListener("webglcontextcreationerror", function() { snippet.log("Error"); }); canvas.getContext('2d') canvas.getContext("webgl"); snippet.log("After creation"); 
   

Entonces, una pregunta es ¿por qué te importa el orden? getContext devuelve null en caso de error, por lo que si quiere saber si falló, está listo. El único punto del webglcontextcreationerror es que obtengas el motivo por el que falló, ya que getContext no tiene forma de hacerlo. Por lo tanto, podría estructurar su código de manera que no importa si es sincronización o asincronía

 var canvas = document.createElement('canvas') function doSomethingWithStatusMessage(e) { log("context creation error: "+ e.statusMessage); } canvas.addEventListener("webglcontextcreationerror", doSomethingWithStatusMessage); log("2d: " + canvas.getContext('2d')); log("webgl: " + canvas.getContext("webgl")); log("after creation"); function log(msg, color) { var div = document.createElement("pre"); div.appendChild(document.createTextNode(msg)); document.body.appendChild(div); }