Dart Future
In diesem Blog habe ich das Thema Future schon einmal gestreift. Das ist aber schon eine Weile her. Zeit, es noch einmal zu tun. Führen wir uns als erstes noch einmal vor Augen, was ein Future genau ist.
Nehmen wir an wir wollen ein File von der Festplatte laden. Das kann ein kleines File sein, was schnell geht, oder ein großes. Beim großen File kann das dauern, bis wir mit dem File weiter arbeiten können. Oder wir greifen auf das Web zu und laden von dort Daten. Je nach Internetverbindung, nach gösse der Daten, dauert auch dies unterschiedlich lang. In beiden Fällen müssen wir also warten, bis wir das File oder die Daten aus dem Internet geladen haben.
Im Beispiel importieren wir zwei Dart Bibliotheken und holen ein Textfile von der Festplatte, welches wir anschließend drucken.Future
Nehmen wir an wir wollen ein File von der Festplatte laden. Das kann ein kleines File sein, was schnell geht, oder ein großes. Beim großen File kann das dauern, bis wir mit dem File weiter arbeiten können. Oder wir greifen auf das Web zu und laden von dort Daten. Je nach Internetverbindung, nach gösse der Daten, dauert auch dies unterschiedlich lang. In beiden Fällen müssen wir also warten, bis wir das File oder die Daten aus dem Internet geladen haben.
Dieses Schaubild verdeutlicht die Problematik sehr gut. Der schwarze Balken repräsentiert unseren Programm Ablauf, von Oben nach unten. Im asynchronen Ablauf wartet die Software die Antwort ab, in unserem Fall bis zum Beispiel das File geladen ist. Im asynchronen Ablauf, wird direkt nach dem "auslösen" des File ladens, der zweite Request (hole Daten aus dem Web) ausgelöst. Im asynchronen Ablauf werden wir von beiden Requests die wir ausgelöst haben, Antworten bekommen. Im Erfolgsfall, aber auch wenn ein Fehler auftritt. In der Programmiersprache Dart kommt hier der Future bzw die Futures zum Einsatz. Im meinem ersten Teil zu diesem Thema hatten wir ja schon ein kleines Beispiel, hier das nächste:
meinFileInhalt.then(.....)
Beim Resultat wenden wir dann die .then Methode an, um das File auszudrucken, im Beispiel ein Textfile. Hier ist wichtig zu verstehen: Ein Future retourniert immer sofort ein Ergebnis, ein Future Objekt. Dieses wird einmal das Ergebnis enthalten, das gewünschte, oder einen Fehler. Mit der .then Methode implementieren wir, was mit dem Ergebnis geschieht. Der Code wird ausgeführt, wenn das Ergebnis da ist. Solange das Ergebnis nicht da ist, wird Dart mit der Programmausführung fortfahren, beginnend mit dem ersten Befehl nach .then !
Wir haben im Code meinFile.readAsString() benutzt. Diese Funktion retourniert ein Objekt vom Typ Future<String>. Wir werden in Dart ab und zu auf Funktionen treffen, die es sowohl asynchron, als auch synchron gibt. Beispiel: .readAsString() // .readAsStringSync(). Nun zu einem Beispiel das wir selbst erstellen:
Wenn man diesen Code ausdruckt, wird man die Verzögerung sehen. Im letzten Code für diesen Post, habe ich noch eine Print Funktion hinzu gefügt. Bei der Ausführung sieht man das asynchrone an diesem Code sehr gut.
Kommentare
Kommentar veröffentlichen