1

我想查询两个 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;
4

1 回答 1

1

为此检查async 包有一个名为 StreamGroup 的类,您可以在该类中组合 N 个流:

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

然后,您可以将该 newStream 用作公共流。

于 2020-12-18T17:23:44.590 回答