Control Flow

Clase 12 de 28Curso para Certificacion de Node.js con OpenJS Foundation 2023

Resumen

Domina el control de flujo en Node con patrones asíncronos prácticos. Aquí verás cómo encarar el Task 2.x con callbacks, ejecutar solicitudes en paralelo, y manejar errores correctamente en stderr con salida de proceso, optimizando además tu estrategia de evaluación.

¿Qué evalúa control flow y cómo optimizar tu estrategia?

Este dominio pesa 12 % y exige resolver tres ejercicios (2.1, 2.2 y 2.3) centrados en sincronía y asincronía en Node. Suelen requerir más líneas de código (alrededor de 10 por ejercicio) y una lectura cuidadosa del enunciado. Se espera que domines callbacks, promesas, async/await, AbortController y el flujo de eventos con EventEmitter. La documentación recomendada es la de Mozilla Developer Network (MDN).

Claves prácticas. - Entender varias formas de manejar flujo asíncrono: callbacks, promises, async/await. - Respuestas suelen ser más cortas con promises, pero usa lo que domines mejor. - Manejo de salida: stdout para resultados, stderr para errores. - Uso de process.exit(1) ante error. - Estrategia: déjalo al final para no perder tiempo con otros dominios más cortos.

¿Cómo resolver el Task 2.x con callbacks y fetch?

El enunciado indica implementar una abstracción tipo HttpGet basada en callbacks: se te da una función fetch(url, callback) que ya está implementada. Tu trabajo está en answer(urlA, urlB, urlC). Debes: - Llamar fetch con cada URL en paralelo. - Imprimir cada resultado en stdout cuando termine. - Si ocurre un error, imprimirlo en stderr e inmediatamente salir con código 1. - No modificar fetch ni ninguna función marcada con nota de “no tocar”.

¿Qué no debes modificar?

La función fetch(url, callback) está provista y marcada con una nota: no la alteres para evitar una calificación cero. Trabaja solo dentro de answer.

¿Cómo manejar errores y salidas?

Crea un callback reutilizable que capture el contrato tradicional (error, data), registre en stderr y haga process.exit(1) si hay error; de lo contrario, imprima en stdout.

function answer(urlA, urlB, urlC) {
  const output = (err, data) => {
    if (err) {
      console.error(err); // stderr.
      process.exit(1);    // código de salida 1.
      return;
    }
    console.log(data);     // stdout.
  };

  // Solicitudes en paralelo.
  fetch(urlA, output);
  fetch(urlB, output);
  fetch(urlC, output);
}

¿Cómo lanzar las solicitudes en paralelo?

Al invocar fetch tres veces sin encadenarlas, cada llamada se procesa de forma asíncrona. El orden de impresión dependerá de cuál finalice primero, cumpliendo el requerimiento de “imprimir a medida que terminan”.

¿Cómo probar de forma segura con json-server sin alterar la solución?

Para validar rápido, puedes simular un API local con json-server. La idea es crear datos de prueba, levantar un servidor y ejecutar node answer para observar que imprime A, B y C conforme respondan. Recuerda: el código de prueba se debe eliminar de la solución final; solo entrega la función answer.

Pasos sugeridos. - Crear api.json con datos de ejemplo. - Ubicarte en el directorio task2.x. - Ejecutar el servidor local: npx json-server --watch api.json. - Abrir en localhost:3000 para confirmar que sirve el JSON. - Ejecutar node answer y verificar impresiones en consola. - Eliminar cualquier código de prueba antes de entregar.

¿Con qué técnica te sientes más cómodo para el control de flujo: callbacks, promises o async/await? Comparte tu enfoque y dudas en los comentarios.