Crear streams con async*
Generar eventos desde un generador.
Crear streams con async* es una lección gratuita de Dart Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Dart Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Dart Academy incluye 4 lecciones en total.
Producir sus propios streams
Hasta ahora ha consumido streams creados por otras personas. Ahora los producirá usted mismo mediante un async generator, la forma más sencilla de emitir eventos.
La palabra clave async*
Marque una función como async* y se convertirá en un generador de streams. Su tipo de retorno es un Stream y puede emitir valores a lo largo del tiempo. 🚿
Stream<int> countTo(int n) async* {
// body uses yield
}yield emite un valor
Dentro de una función async*, yield envía un valor al stream. La ejecución se pausa allí hasta que el listener está listo para recibir más.
Stream<int> oneTwo() async* {
yield 1;
yield 2;
}yield en un bucle
Combine yield con un bucle para emitir muchos valores. Cada iteración envía automáticamente el siguiente número al stream.
Stream<int> countTo(int n) async* {
for (var i = 1; i <= n; i++) yield i;
}await dentro de async*
Como la función es async, puede usar await entre yields. Esto le permite obtener datos o esperar antes de emitir el siguiente evento.
Stream<int> ticker() async* {
while (true) {
await Future.delayed(Duration(seconds: 1));
yield DateTime.now().second;
}
}yield* reenvía un stream
Use yield* para emitir desde el generador todos los eventos de otro stream. Inserta ese stream completo en el suyo.
Stream<int> combined() async* {
yield* countTo(3);
yield 99;
}Diferido hasta que se escucha
Una función async* no empieza a ejecutarse hasta que alguien la escucha. El cuerpo solo se ejecuta a medida que el listener solicita cada valor. ⏸️
La pausa respeta al listener
Si un listener se pausa, el generador también se pausa en su siguiente yield. Esta contrapresión evita que los productores saturen a los consumidores.
Errores de async*
Un throw dentro de una función async* se convierte en un evento de error del stream. Los listeners pueden capturarlo como cualquier otro error de stream.
Stream<int> risky() async* {
yield 1;
throw 'boom';
}Consumir su generador
Lea el stream generado de la forma habitual con await for. Cada valor producido llega al bucle en orden.
await for (final n in countTo(3)) {
print(n);
}async* frente a StreamController
Para una salida secuencial basada en solicitudes, async* es más sencillo que un StreamController. Use un controlador solo cuando los eventos provengan de callbacks externos.
Comprobación rápida
¿Cómo se emite un valor desde una función async*?
Repaso
Ha creado streams con async*, ha enviado valores mediante yield, ha reenviado valores con yield* y ha esperado entre eventos. Ahora puede consumir y producir streams. 🎉
Preguntas frecuentes
¿La lección «Crear streams con async*» es gratis?
Sí — el texto completo de «Crear streams con async*» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Dart Academy, actualiza a CoddyKit PRO. El curso de Dart Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Crear streams con async*»?
Generar eventos desde un generador. Practicas Dart Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Dart Academy?
No se requiere experiencia previa. Dart Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Crear streams con async*»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Dart Academy?
Sí. Cada lección de Dart Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Escuchar con await for
- Streams individuales frente a broadcast
- Transformar streams: map, where y take
- Crear streams con async*