0Pricing
Dart Academy · Lektion

Streams mit async* erstellen

Ereignisse aus einem Generator liefern

Streams mit async* erstellen ist eine kostenlose Dart Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Dart Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Dart Academy-Kurs umfasst insgesamt 4 Lektionen.

Eigene Streams erzeugen

Bisher haben Sie Streams verwendet, die andere erstellt haben. Nun erzeugen Sie selbst welche – mit einem async generator, der saubersten Möglichkeit, Ereignisse auszugeben.

Das Schlüsselwort async*

Markieren Sie eine Funktion mit async*, wird sie zu einem Stream-Generator. Ihr Rückgabetyp ist ein Stream, und sie kann im Laufe der Zeit Werte ausgeben. 🚿

Stream<int> countTo(int n) async* {
  // body uses yield
}

yield gibt einen Wert aus

Innerhalb einer async*-Funktion sendet yield einen Wert an den Stream. Die Ausführung pausiert dort, bis der Listener für den nächsten Wert bereit ist.

Stream<int> oneTwo() async* {
  yield 1;
  yield 2;
}

yield in einer Schleife

Kombinieren Sie yield mit einer Schleife, um viele Werte auszugeben. Jeder Durchlauf sendet automatisch die nächste Zahl an den Stream.

Stream<int> countTo(int n) async* {
  for (var i = 1; i <= n; i++) yield i;
}

await innerhalb von async*

Da die Funktion asynchron ist, können Sie zwischen den yield-Anweisungen await verwenden. So können Sie vor der Ausgabe des nächsten Ereignisses Daten abrufen oder eine Verzögerung einbauen.

Stream<int> ticker() async* {
  while (true) {
    await Future.delayed(Duration(seconds: 1));
    yield DateTime.now().second;
  }
}

yield* leitet einen Stream weiter

Verwenden Sie yield*, um innerhalb Ihres Generators jedes Ereignis eines anderen Streams auszugeben. Dadurch fügen Sie den gesamten anderen Stream in Ihren eigenen ein.

Stream<int> combined() async* {
  yield* countTo(3);
  yield 99;
}

Bis zum Abhören verzögert

Eine async*-Funktion beginnt erst mit der Ausführung, wenn jemand den Stream abhört. Der Funktionskörper wird nur ausgeführt, während der Listener die einzelnen Werte anfordert. ⏸️

Pausen berücksichtigen den Listener

Wenn ein Listener pausiert, pausiert auch der Generator beim nächsten yield. Dieser Rückstau verhindert, dass Produzenten die Verbraucher überlasten.

Fehler aus async*

Ein throw innerhalb einer async*-Funktion wird zu einem Fehlerereignis im Stream. Listener können es wie jeden anderen Stream-Fehler abfangen.

Stream<int> risky() async* {
  yield 1;
  throw 'boom';
}

Ihren Generator verwenden

Lesen Sie den erzeugten Stream wie gewohnt mit await for. Jeder per yield ausgegebene Wert gelangt in der richtigen Reihenfolge in die Schleife.

await for (final n in countTo(3)) {
  print(n);
}

async* vs. StreamController

Für eine sequenzielle, auf Anforderung erfolgende Ausgabe ist async* einfacher als ein StreamController. Verwenden Sie einen Controller nur, wenn Ereignisse aus externen Callbacks stammen.

Kurzer Wissenstest

Wie geben Sie einen Wert aus einer async*-Funktion aus?

Zusammenfassung

Sie haben mit async* Streams erstellt, Werte per yield gesendet, mit yield* weitergeleitet und zwischen Ereignissen await verwendet. Nun können Sie Streams sowohl verwenden als auch erzeugen. 🎉

Häufig gestellte Fragen

Ist die Lektion „Streams mit async* erstellen“ kostenlos?

Ja — der vollständige Text von „Streams mit async* erstellen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Dart Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Dart Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Streams mit async* erstellen“?

Ereignisse aus einem Generator liefern Du übst Dart Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Dart Academy zu starten?

Keine Vorkenntnisse erforderlich. Dart Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Streams mit async* erstellen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Dart Academy-Lektion Code schreiben und ausführen?

Ja. Jede Dart Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Mit await for zuhören
  2. Single- und Broadcast-Streams
  3. Streams transformieren: map, where, take
  4. Streams mit async* erstellen
← Zurück zu Dart Academy