2016-07-28 9 views

Antwort

6

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.

+0

Wirklich guten Rundown! Vielen Dank! – BluishMicrobe