#firebase #flutter #dart #firebase-realtime-database #google-cloud-firestore
# #firebase #flutter #dart #firebase-realtime-database #google-облако-firestore
Вопрос:
Я хочу запросить две коллекции Firestore, но хочу вернуть только данные коллекции, которая возвращает результат быстрее, чем другая.
Мой подход заключался в том, чтобы использовать 2 потока и ждать, пока один из них вернет данные, которые я затем смогу вернуть.
Я использовал параметр onData, но компилятор никогда не переходит в метод onData, даже если в коллекциях есть данные, соответствующие запросу.
var someId;
CollectionReference collection1 = _db.collection('collection1');
CollectionReference collection2 = _db.collection('collection2');
Query collection1Query = collection1.where('users', arrayContains: uid);
Query collection2Query = collection2.where('users', arrayContains: uid);
var resultStream1 = collection1Query.snapshots().listen((doc) {});
var resultStream2 = collection2Query.snapshots().listen((doc) {});
while(someId == null){
resultStream1.onData((data) {
var someId = data.docs.first.id;
});
resultStream2.onData((data) async {
var someId = data.docs.first.id;
await doOneMoreThing(someId);
});
}
resultStream1.cancel();
resultStream2.cancel();
return someId;
Комментарии:
1. проверьте
StreamGroup
/StreamZip
Ответ №1:
Для этого проверьте асинхронный пакет, в котором есть класс с именем StreamGroup, и вы можете объединить N потоков для записи этого класса:
final newStream = StreamGroup.merge([streamOne, streamTwo]);
Затем вы можете использовать этот newStream как общий поток.