Conocimientos Básicos de Tareas y Schedulers
¿Qué es el Procesamiento Síncrono?
El procesamiento síncrono se ejecuta inmediatamente en el orden en que está escrito el código, y no procede al siguiente proceso hasta que el proceso anterior se haya completado.
Ejemplo
ts
console.log('A');
console.log('B');
console.log('C');
// Salida:
// A
// B
// C¿Qué es el Procesamiento Asíncrono?
El procesamiento asíncrono es procesamiento que no se ejecuta inmediatamente, sino que se ejecuta después de que el procesamiento síncrono actual haya terminado. El procesamiento asíncrono incluye "macrotareas" y "microtareas".
Macrotarea
- Una tarea que se ejecuta en el siguiente ciclo del event loop.
- Ejemplos:
setTimeout,setInterval, eventos del navegador
Ejemplo de Ejecución
ts
console.log('Inicio');
setTimeout(() => console.log('Macrotarea'), 0);
console.log('Fin');
// Salida:
// Inicio
// Fin
// MacrotareaSoporte de RxJS
asyncScheduler- Usa
setTimeoutinternamente - Funciona como una macrotarea
- Usa
ts
import { of, asyncScheduler } from 'rxjs';
import { observeOn } from 'rxjs';
of('Hola')
.pipe(observeOn(asyncScheduler))
.subscribe(console.log);
// Salida:
// HolaMicrotarea
- Una tarea que se ejecuta inmediatamente después de que la tarea actual termina, pero antes de que comience la siguiente tarea.
- Ejemplos:
Promise.then,queueMicrotask
Ejemplo de Ejecución
ts
console.log('Inicio');
Promise.resolve().then(() => console.log('Microtarea'));
console.log('Fin');
// Salida:
// Inicio
// Fin
// MicrotareaSoporte de RxJS
asapScheduler- Usa
Promise.resolve().then()internamente - Funciona como una microtarea
- Usa
ts
import { of, asapScheduler } from 'rxjs';
import { observeOn } from 'rxjs';
of('Hola')
.pipe(observeOn(asapScheduler))
.subscribe(console.log);
// Salida:
// HolaTarea Síncrona
- Código normal a ejecutar inmediatamente.
Soporte de RxJS
queueScheduler- Parece ser síncrono, pero permite un control fino a través de la puesta en cola de tareas.
ts
import { of, queueScheduler } from 'rxjs';
import { observeOn } from 'rxjs';
of('Ahora')
.pipe(observeOn(queueScheduler))
.subscribe(console.log);
// Salida:
// AhoraResumen del Orden de Ejecución
Ejemplo de Código
ts
console.log('1');
setTimeout(() => console.log('2 (setTimeout)'), 0);
Promise.resolve().then(() => console.log('3 (Promise)'));
console.log('4');
// Salida:
// 1
// 4
// 3 (Promise) 👈 Microtarea
// 2 (setTimeout) 👈 MacrotareaTabla de Correspondencia entre Tareas y Schedulers de RxJS
| Tipo | Ejemplo | Scheduler de RxJS |
|---|---|---|
| Síncrono | Código normal | queueScheduler |
| Microtarea | Promise.then, queueMicrotask | asapScheduler |
| Macrotarea | setTimeout, setInterval | asyncScheduler |