Quiero parchear el objeto de alert en el navegador para mostrar texto adicional, pero necesito esperar algunos datos para mostrar el contenido necesario en la alerta. Sin embargo, no puedo posponer la llamada de alert .
Además, no conozco una forma de cerrar la alerta y mostrar otra alerta sin una acción del usuario (si existe, también puede resolver mi problema).
Entonces, tengo que esperar algunos datos, pero no puedo romper el comportamiento de alert , que bloquea la ejecución del código.
Para esperar una respuesta, puedo hacer algo como esto:
var start = performance.now(); while(true) { var time = performance.now() - start; if (time >= 3000) break; } console.log('done');Pero en lugar de verificar el temporizador, verificaré algunos datos.
De esta manera debería funcionar, pero esto es terrible para el rendimiento, porque es lo opuesto a la alert , que simplemente congela el hilo y no hace nada hasta el cuadro de diálogo de cierre, y cargaremos la CPU con trabajo inútil.
¿Es posible congelar un hilo para ser más eficiente energéticamente?
Tengo que congelar el hilo hasta que obtenga algunos datos de un trabajador.
Promises no bloquea un hilo principal, por lo que no reproduce el comportamiento de alert que necesito.
Lo sé, y esta nota es lo suficientemente justa para el desarrollo de páginas web y aplicaciones.
Pero este caso es especial. Desarrollo una función para una extensión del navegador, para traducir alertas. La extensión del navegador no debe modificar el comportamiento de la página. Entonces, cuando un sitio web está llamando alerta, el hilo debe congelarse. La extensión del navegador no debe posponer una llamada de alert para evitar un comportamiento inesperado en la página.
Puede ver la característica explicada aquí: Feat: Implementar traducción opcional de alertas y registros de consola #102
La única forma en que puedo pensar en "bloquear" sin consumir CPU sería hacer una XMLHttpRequest síncrona (que está en desuso porque el bloqueo no es fácil de usar). Deberá configurar un servidor que pueda leer la carga útil de la solicitud y responder después de la cantidad de tiempo especificada.
const xh = new XMLHttpRequest(); xh.open('GET', urlToYourServer, false); xh.send('3');donde ese '3' es el cuerpo de la solicitud que el servidor analiza (y responde después de 3 segundos).
Dicho esto, no debe hacer esto : es un enfoque muy poco elegante y poco amigable para el usuario. Evitará que ocurra cualquier otra acción (incluido el repintado del navegador y otras solicitudes) mientras esto sucede. Es mejor esperar adecuadamente por lo que necesite (ya sea a través de una .then , una devolución de llamada o algo más), pero sin más contexto en la pregunta, no está claro cómo lograr esto exactamente.