为什么有时从 Firestore 中读取文档时不按顺序排列?

Why sometime reading document from Firestore not in order in flutter?

我通过以下代码从集合中获取了所有文档

FirebaseFirestore.instance.collection(AppString.FB_POSTS).orderBy('ts',descending: true).limit(10).get().then((querySnapshot){
      querySnapshot.docs.asMap().forEach((index,document)  {
        FirebaseFirestore.instance.collection(AppString.FB_POSTS).doc(document.id).get().then((dataSnapshot){
          print(index);
        });
      }
      );
    });

这个代码昨天工作得很好,但今天我看到 froWhich 循环不按顺序工作。

输出:

flutter: 8
flutter: 7
flutter: 4
flutter: 3
flutter: 2
flutter: 5
flutter: 1
flutter: 6
flutter: 0
flutter: 9 

预期输出:

flutter: 0
flutter: 1
flutter: 2
flutter: 3
flutter: 4
flutter: 5
flutter: 6
flutter: 7
flutter: 8
flutter: 9

您的代码是异步的。这意味着,您永远无法保证订单会保持不变。

发生的事情是:对于文档快照列表中的每个条目(通过 运行ning forEach)调用一个异步函数 (get)。那些将“随时”完成,这意味着第一个元素可能最后完成,从而导致您的打印最后 运行。

此外,在集合或查询上使用“get”时,您已经收到了文档。无需再次获取它们:)