Colas de tareas en TypeScript: guía completa para principiantes

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción a las colas de tareas en TypeScript

\n\n

La cola de tareas (task queue) es una de las estructuras de datos fundamentales en programación, que funciona bajo el principio "primero en entrar, primero en salir" (FIFO). En TypeScript, las colas de tareas se utilizan ampliamente para gestionar operaciones asíncronas, procesar solicitudes, organizar procesos en segundo plano y muchos otros escenarios.

\n\n

En este artículo, analizaremos cómo crear y usar colas de tareas en TypeScript desde cero. Aprenderás a implementar una cola básica, agregar prioridades y manejar errores. El material está orientado a desarrolladores principiantes familiarizados con los fundamentos de TypeScript.

\n\n

¿Qué es una cola de tareas y para qué sirve?

\n\n

Una cola es una lista ordenada de elementos donde la adición de nuevos elementos ocurre al final y la extracción desde el principio. Imagina una cola en una tienda: el primer cliente es atendido primero, y los nuevos se colocan al final.

\n\n

En programación, las colas de tareas se utilizan para:

\n\n
    \n
  • Procesamiento asíncrono — ejecutar tareas en segundo plano sin bloquear el hilo principal
  • \n
  • Gestión de carga — limitar la cantidad de operaciones ejecutadas simultáneamente
  • \n
  • Procesamiento de eventos — procesar secuencialmente las solicitudes entrantes
  • \n
  • Planificación de tareas — ejecutar tareas con retraso o según un horario
  • \n
\n\n

Implementación de una cola de tareas básica en TypeScript

\n\n

Creación de la clase de cola

\n\n

Empecemos con una implementación simple de una cola en TypeScript. Crearemos una clase TaskQueue que soporte operaciones básicas:

\n\n
// task-queue.ts\ntype Task<T> = () => Promise<T>;\n\nclass TaskQueue<T> {\n    private queue: Task<T>[] = [];\n    private isProcessing = false;\n\n    // Agregar una tarea a la cola\n    enqueue(task: Task<T>): void {\n        this.queue.push(task);\n        if (!this.isProcessing) {\n            this.processQueue();\n        }\n    }\n\n    // Procesar la cola\n    private async processQueue(): Promise<void> {\n        this.isProcessing = true;\n\n        while (this.queue.length > 0) {\n            const task = this.queue.shift()!;\n            try {\n                const result = await task();\n                console.log('Tarea completada:', result);\n            } catch (error) {\n                console.error('Error al ejecutar la tarea:', error);\n            }\n        }\n\n        this.isProcessing = false;\n    }\n\n    // Verificar si la cola está vacía\n    isEmpty(): boolean {\n        return this.queue.length === 0;\n    }\n\n    // Obtener el tamaño de la cola\n    size(): number {\n        return this.queue.length;\n    }\n}
\n\n

Uso de la cola

\n\n

Ahora veamos cómo usar nuestra clase en la práctica:

\n\n
// example.ts\nconst taskQueue = new TaskQueue<string>();\n\n// Creamos varias tareas asíncronas\nconst task1 = async () => {\n    await delay(1000);\n    return 'Primera tarea completada';\n};\n\nconst task2 = async () => {\n    await delay(500);\n    return 'Segunda tarea completada';\n};\n\nconst task3 = async () => {\n    await delay(200);\n    return 'Tercera tarea completada';\n};\n\n// Agregamos tareas a la cola\ntaskQueue.enqueue(task1);\ntaskQueue.enqueue(task2);\ntaskQueue.enqueue(task3);\n\n// Función auxiliar\nfunction delay(ms: number): Promise<void> {\n    return new Promise(resolve => setTimeout(resolve, ms));\n}\n\n// Resultado:\n// Tarea completada: Primera tarea completada (después de 1s)\n// Tarea completada: Segunda tarea completada (después de 1.5s)\n// Tarea completada: Tercera tarea completada (después de 1.7s)
\n\n

Cola avanzada con prioridades

\n\n

En proyectos reales, a menudo es necesario procesar tareas con diferentes prioridades. Ampliemos nuestra cola agregando soporte para prioridades:

\n\n
// priorit                

Blogs

Book Recommendations