Flattern: Fehler: 'Warten' kann nur in den Methoden 'Async' oder 'Async *' verwendet werden. Ich dachte sogar, die Methode sei asynchron

Nov 20 2020

Ich habe diese Methode:

Future<AppUser> _getUser(String documentId) async {
    var document = await firestore.collection('customers').doc(documentId);
    document.get().then((DocumentSnapshot documentSnapshot) {
          print(documentSnapshot.data());
    });
    AppUser bruceUser = AppUser(userId: 'user006',);

    return bruceUser;   
}

Und darunter habe ich eine Variable, die diese Methode verwendet:

AppUser _user = await _getUser(document.id);

Dies gibt jedoch den folgenden Fehler zurück:

Error: 'await' can only be used in 'async' or 'async*' methods.

Was mache ich hier falsch? Ich möchte _user nicht in Future ändern, da dies den Code weiter verkompliziert. Warum funktioniert das Warten also nicht?

Antworten

1 JustCode Nov 20 2020 at 00:57

_getUser()ist eine asnyc-Funktion, aber nicht die aufrufende Funktion. Der Fehler, den Sie erhalten, besagt, dass awaiter in einer nicht asynchronen Funktion verwendet wurde. Wenn Sie Schwierigkeiten haben, die Aufruferfunktion in asynchron zu konvertieren, versuchen Sie thenFolgendes.

snapshot.data.docs.map((DocumentSnapshot document) {
    _getUser(document.id).then((user) {
          //code here
    });
}

Zusammenfassend gibt es dafür zwei Lösungen

  1. Konvertieren Sie die Aufruferfunktion in async.
  2. Verwenden _getUser().then((user){});