【问题标题】:Nested async functions causing problems [duplicate]嵌套异步函数导致问题[重复]
【发布时间】: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


【解决方案1】:

我遇到了同样的问题 (How to await a Map.forEach() in dart)。

要解决此问题,您需要使用for (var mapEntry in map) {}。该地图将是 map 将是您正在循环的地图。这也适用于Lists 或任何Iterable&lt;T&gt;。有关详细信息,请参阅我链接的问题。

如果您需要更多帮助或我的回答不起作用,请告诉我。

【讨论】:

    猜你喜欢
    • 2018-10-28
    • 2012-10-12
    • 2019-08-21
    • 1970-01-01
    • 2018-06-25
    • 1970-01-01
    • 2012-07-29
    • 2011-06-09
    相关资源
    最近更新 更多