为什么有时从 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”时,您已经收到了文档。无需再次获取它们:)
我通过以下代码从集合中获取了所有文档
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”时,您已经收到了文档。无需再次获取它们:)