Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 如何等待多个Firestore流在flift中返回数据_Firebase_Flutter_Dart_Firebase Realtime Database_Google Cloud Firestore - Fatal编程技术网

Firebase 如何等待多个Firestore流在flift中返回数据

Firebase 如何等待多个Firestore流在flift中返回数据,firebase,flutter,dart,firebase-realtime-database,google-cloud-firestore,Firebase,Flutter,Dart,Firebase Realtime Database,Google Cloud Firestore,我想查询两个Firestore集合,但只想返回集合的数据,该集合返回的结果比另一个更快 我的方法是使用两个流,等待其中一个返回数据,然后返回 我使用了onData参数,但是编译器从不跳转onData方法,即使集合中有与查询匹配的数据 var someId; CollectionReference collection1 = _db.collection('collection1'); CollectionReference collection2 = _db.colle

我想查询两个Firestore集合,但只想返回集合的数据,该集合返回的结果比另一个更快

我的方法是使用两个流,等待其中一个返回数据,然后返回

我使用了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;
对于该检查,有一个名为StreamGroup的类,您可以在该类上组合N个流:

final newStream = StreamGroup.merge([streamOne, streamTwo]);

然后您可以将该新闻流用作公共流。

检查
StreamGroup
/
StreamZip