typestar

Streams y async* en Dart

Un generador que emite en el tiempo; await for consume en orden.

// async* builds a Stream; yield emits into it as values are ready.
Stream<String> radioCalls() async* {
  final calls = ['curlew west', 'two egrets', 'harrier over reeds'];
  for (final call in calls) {
    await Future.delayed(const Duration(milliseconds: 20));
    yield call;
  }
}

Future<void> main() async {
  // await for consumes the stream in arrival order.
  await for (final call in radioCalls()) {
    print('Radio: $call');
  }
  final count = await radioCalls().length;
  print('$count calls this watch');
}

Cómo funciona

  1. async* construye un Stream; yield emite cada valor.
  2. await for itera a medida que los valores llegan.
  3. Los getters de Stream como .length son futures a su vez.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
17
Caracteres a escribir
494
Tokens
105
Ritmo de tres estrellas
65 tpm

Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 97 segundos.

Escribe este fragmento

Paso 2 de 3 en Async; paso 23 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →