Sé que bloquear el bucle de eventos es malo y las consecuencias de eso. Pero incluso el módulo fs nativo proporciona algunas funciones de sincronización para algunos fines, por ejemplo, las CLI que usan fs.readFileSync .
Me gustaría convertir el siguiente código de espera asincrónica en código de bloqueo.
let value = undefined; function setup() { return new Promise((resolve) => { setTimeout(() => { value = "**value**"; resolve(); }); }); } // need to convert below function to blocking async function getValue() { await setup(); return value; } console.log(await getValue()); // top level await OKAsumiendo que está bloqueando, entonces podemos llamarlo como
getValue(); // without await or .thenLo probé así. Pero no está funcionando.
function getValue() { setup(); while (!value) { // wait until we get value } return value; } console.log(getValue())¿Cómo puedo conseguir esto?
(El fs.readFileSync está bloqueando. ¿Hay alguna manera de que podamos usar la técnica utilizada por readFileSync)
Editar
Hilo relacionado: Convertir el método asincrónico/de devolución de llamada en método de bloqueo/sincrónico
¿Cómo puedo conseguir esto?
Cambias de idioma.
En serio: JavaScript es (más o menos, hay muchas advertencias allí) de un solo subproceso. Su código de devolución de llamada debe ser procesado por el mismo hilo que pretende bloquear.
NO hay manera de que puedas lograr esto: es imposible.
Entonces, o cambia su idioma (en C# o Java puede activar un hilo y bloquearlo como desee, mientras que otros hilos hacen algo de trabajo), o cambia los requisitos.
Sospecho que esta última opción es la solución real a su supuesto problema. Ahora, ¿qué es lo que realmente necesitas hacer?