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
- Mit await for zuhören
- Single- und Broadcast-Streams
- Streams transformieren: map, where, take
- Streams mit async* erstellen