await / async parece comportarse de manera diferente en Chrome y Safari en Mac, en comparación con Chrome en Windows y Linux.
<select id="dbgselect"> <option>1</option> <option>2</option> <option>3</option> </select> <script> async function dbg(type) { console.log(`A [${type}]`); await dbg2(type); console.log(`B [${type}]`); } async function dbg2(type) { console.log(`C [${type}]`); } document.getElementById("dbgselect").oninput = () => { dbg("input"); }; document.getElementById("dbgselect").onchange = () => { dbg("change"); }; </script>Al hacer una selección en el menú desplegable, la salida en Linux/Windows (en Chrome) es:
A [input] C [input] A [change] C [change] B [input] B [change]La salida en Mac (tanto en Chrome como en Safari):
A [input] C [input] B [input] A [change] C [change] B [change] SIN EMBARGO, si agrego esto en la parte inferior, para invocar dbg fuera del contexto de un evento:
setTimeout(() => { dbg("input"); dbg("change"); }, 0); Luego, el resultado en Mac cambia y se convierte en el mismo que en Linux y Windows (es decir A,C,A,C,B,B en lugar de A,C,B,A,C,B ).
Mis preguntas:
¿Alguna de estas implementaciones es un error? (es decir, una violación de algún estándar).
¿Esta diferencia en el comportamiento está documentada o discutida en alguna parte? no pude encontrar