【发布时间】:2021-11-29 15:21:58
【问题描述】:
我写了这段代码,它导致了一些问题:
static getFriendsRequests({required id}) async {
QuerySnapshot snapshot = await friendsRef
.doc(id)
.collection('received')
.get();
List<friendRequestItem> feedItems = [];
snapshot.docs.forEach((doc) async{
DocumentSnapshot extracted = await usersRef.doc(doc.reference.id).get();
MyUser tempUser = MyUser.fromJsonDocument(extracted);
String url = '';
tempUser.profilePictureURL=='' ? null : url=tempUser.profilePictureURL;
FriendRequest fr = FriendRequest(
userID: tempUser.userID, uniqueName: tempUser.uniqueName,
name: tempUser.name, mediaURL: url);
print(fr.uniqueName+fr.name+fr.userID+fr.mediaURL);
feedItems.add(friendRequestItem(friendReq: fr));
});
return feedItems;}
为了帮助阅读代码,第一个查询是获取一个文档列表,每个文档都引用一个唯一的 id。第二,对于每个文档,我再次在数据库中搜索给定 id 的一些数据。现在我注意到问题应该与异步方法有关,因为我得到的所有数据都是正确的,但返回可能发生在第二种方法结束之前。我该如何解决?如果您需要有关代码其他部分的更多信息,请告诉我。谢谢
【问题讨论】:
-
用“正常”
for (var x in ...)循环替换snapshot.docs.forEach -
@ChristopherMoore 类似,但使用 Future.forEach 会导致更多问题。我用简单的for循环解决了
-
@LorenzoCutrupi 阅读副本中的所有答案。
标签: flutter google-cloud-firestore