Flutter / Dart: ожидание потока внутри потока - PullRequest
0 голосов
/ 26 мая 2020

У меня есть поток внутри flutter, который пакетно запрашивает элементы из базы данных firestore, объединяет их и возвращает слияние. Код выглядит следующим образом.

Stream<List<Memo>> get memos {
  // list of streams to be merged
  List<Stream<List<Memo>>> streams = [];
  // get list of friend userids
  Firestore.instance.collection("users").document(userid).collection("friends").snapshots().map(_snapshotToStringList).listen((friends){ // add where confirmed == true to this
    // break list into chunks of ten
    for (var i = 0; i < friends.length; i++) {
      // query post list for each chunk of 10 and add to stream list
      streams.add(Firestore.instance.collection("memos").where("userid", isEqualTo: friends.sublist(i, i + 1)).snapshots().map(_snapshotToMemoList));
    }
    print(streams);
    // merge steam list
  });
  print(streams);
  return StreamGroup.merge(streams);
}

Проблема в том, что функция завершается до того, как поток вернет необходимые значения и добавит их в список потоков, которые необходимо объединить и вернуть, в результате чего возвращается нулевой результат. Я не могу поместить оператор ожидания в функцию потока, поэтому я не уверен, как дождаться завершения внутреннего потока до окончательного возврата. Приветствуются любые советы по устранению этой проблемы.

1 Ответ

0 голосов
/ 26 мая 2020

Потоки - это события с асинхронными данными. В результате выполняется второй оператор печати, и после добавления потоков выполняется внутренняя печать. Здесь вам могут помочь официальные документы

...