Sobes.tech
Middle

¿Cómo interactúa con el ciclo de eventos (event loop)?

sobes.tech AI

Respuesta de la IA

No interactúo directamente con el ciclo de eventos, ya que es una mecánica interna del motor de JavaScript (por ejemplo, V8 en Node.js y navegadores). Mi interacción es indirecta, a través de operaciones asíncronas.

Los puntos principales de contacto:

  • Temporizadores: setTimeout, setInterval. Colocan tareas en la cola de callbacks, que serán ejecutadas por el ciclo de eventos después de que pase el tiempo.
  • Promesas: Promise. Sus métodos (then, catch, finally) registran callbacks que se ejecutan de forma asíncrona en las microtareas del ciclo de eventos.
  • Operaciones de entrada/salida asíncronas: Solicitudes al servidor (fetch, XMLHttpRequest), trabajo con el sistema de archivos en Node.js. Su finalización provoca la colocación de callbacks correspondientes en la cola de macro o micro tareas.
  • Manejadores de eventos DOM: addEventListener. Los callbacks de los manejadores se ejecutan cuando el ciclo de eventos procesa un evento ocurrido en el DOM.

Ejemplo de uso de promesas para una operación asíncrona:

// Función asíncrona
async function fetchData(url) {
  try {
    const response = await fetch(url); // Operación asíncrona
    if (!response.ok) {
      throw new Error(`Error HTTP: ${response.status}`);
    }
    const data = await response.json(); // Operación asíncrona
    return data;
  } catch (error) {
    console.error('Error al obtener datos:', error);
    throw error; // Re-throw
  }
}

// Llamada a la función asíncrona y manejo del resultado
fetchData('https://api.example.com/data')
  .then(data => {
    console.log('Datos recibidos:', data); // Este callback se ejecutará de forma asíncrona
  })
  .catch(error => {
    console.error('Ocurrió un error:', error); // Este callback se ejecutará en caso de error
  });

console.log('Este código se ejecutará ANTES de que terminen las operaciones asíncronas.'); // Código síncrono

Comprender cómo funciona el event loop me ayuda a escribir código no bloqueante, gestionar eficientemente operaciones asíncronas y evitar que la interfaz de usuario se congele. Tengo en cuenta que operaciones síncronas largas bloquean el hilo principal y el ciclo de eventos, por lo que trato de evitarlas o moverlas a web workers.