繁体   English   中英

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

[英]How to wait for multiple Firestore Streams to return Data in Flutter

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

我的方法是使用 2 个流并等到其中一个返回数据,然后我可以返回。

我使用了 onData 参数,但即使 collections 中有与查询匹配的数据,编译器也不会在 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;

为此检查异步 package有一个名为 StreamGroup 的 class,您可以在该 class 上组合 N 个流:

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

然后,您可以将该 newStream 用作常见的 stream。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM