Używam trzepakiem z Firebase, aby utworzyć aplikację. Poniższa funkcja otrzymuje dane z mojej bazy danych FireBase, ale problem polega na tym, że otrzymanie danych zajmuje go zbyt długo. Jak upewnić się, że aplikacja czeka na Firebase otrzymanie danych, aby najpierw zakończyć przed kontynuowaniem?

Chciałbym zrobić coś jak czekać, ale nie wiem, czy mogę zrobić:

await Firestore.instance...

Kod:

  void getData() {

    Firestore.instance
        .collection('collection')
        .document('document')
        .get()
        .then((DocumentSnapshot ds) {

          var count = ds.data.length;
          for(var i = 0; i < count; i ++){
            Firestore.instance
                .collection('collection')
                .document('document')
                .get()
                .then((DocumentSnapshot dss) {
                // do something

            });
          }
    });
  }
1
user3702643 21 marzec 2020, 08:45

2 odpowiedzi

Najlepsza odpowiedź

Aby użyć czekać, musisz dokonać swojej funkcji async:

Future<void> getData() async {

Potem tak, możesz zrobić

var result = await Firestore.instance.collection...

Zamiast obsługiwać przyszłego wyniku w wywołaniu zwrotnym wtedy (). Następna linia nie zostanie wykonana, dopóki przyszłość nie zostanie rozwiązana.

1
MickaelHrndz 21 marzec 2020, 05:56

Musisz czekać na Firestore, aby zwrócić dane. a następnie go zwróć.

Future getData() async {
  DocumentSnapshot ds = await Firestore.instance
      .collection('collection')
      .document('document')
      .get();
  final data = ds.//do something with document snapshot

  return data;
}

Mam nadzieję że to pomoże.

0
Suman Maharjan 21 marzec 2020, 06:14