Warum gibt das Druckergebnis immer "asd" zurück?Verwenden von Futures mit Dart
Antwort
Async-Code ist nur für die spätere Ausführung geplant, und der Synchronisierungscode wird weiterhin ausgeführt, ohne auf den Async-Code zu warten. Die Methode, die Sie an Future.then(...)
übergeben, wird ausgeführt, wenn der geplante Async-Code beendet ist. Auf StackOverflow finden Sie eine Menge solcher Fragen und Beispiele, die [: dart-async:] getaggt wurden.
Um Code ausgeführt werden, wenn der Asynchron-Code abgeschlossen Sie Kette müssen es mit then
wie Sie mit anderen Code haben
var jerl = "asd";
HttpRequest.request('Foo',
method: "GET",
/* return */ requestHeaders: {"Authorization": "Secret"})
.then((response) {
var jer1 = x.responseText;
print(jerl);
});
Sie können die async
/await
Funktion Code mehr aussehen wie Synchronisationscode
Future someMethod() async { // <== added `Future` and `async`
var jerl = "asd";
var response = await HttpRequest.request('Foo', // <== added `await`
method: "GET",
requestHeaders: {"Authorization": "Secret"}).then((x) =>
print(response.text);
}
async
ist ansteckend. Es gibt keine Möglichkeit, von der asynchronen Ausführung zur synchronen Ausführung zurückzukehren. Wenn Ihr Code eine asynchrone Methode oder Funktion aufruft und Sie Code benötigen, der auf das asynchrone Ergebnis wartet, müssen Sie den folgenden Code (auch in Aufrufmethoden) mit .then
verketten (oder verwenden Sie async
/await
). Damit das funktioniert muss man auch return
die Zukunft dem Anrufer mitteilen damit er .then()
darauf anrufen kann.
Mit async
/await
müssen Sie nicht explizit die Zukunft zurückgeben.
async
/await
nicht Asynchron-Code sync machen (wie oben erwähnt), es macht es nur mehr wie Sync-Code aussehen . Das zugrundeliegende Verhalten ist identisch mit then
.
Wirklich guten Rundown! Vielen Dank! – BluishMicrobe
das sieht nicht wie angularjs code .... – Claies
Muss es unterbewusst hinzugefügt haben – BluishMicrobe