【问题标题】:Dart - Future inside Future not functioning properlyDart - Future 中的 Future 无法正常运行
【发布时间】:2025-12-27 03:00:07
【问题描述】:

所以我有这个代码:

getAllDiscussionsFromDb() async {

  List<Discussion> discussionsToReturn = [];

  List<Discussion> returnDiscussions(var args){
    return discussionsToReturn;
  }

  var discussionsFromDb = await database.query("select * from discussions");
  // We have to instantiate actual discussion objects from the database columns
  return discussionsFromDb.forEach((discussion) async {
    int discussionId = discussion[4];
    var comments;
    comments = await getCommentsOfDiscussion(discussionId);
    discussionsToReturn.add(new Discussion(discussion[0], discussion[1], discussion[2], discussion[3], comments));
  }).then(returnDiscussions);
}

唯一的问题是 cmets = ... 行。

这是 getCommentsOfDiscussion 函数:

getCommentsOfDiscussion(id) async {

  List<SingleComment> allComments = [];

  List<SingleComment> returnComments(var args) {
    return allComments;
  }

  var commentsFromDb = await database.query("select * from comments where discussionId = $id");
  // We have to instantiate actual SingleComment objects from the database columns
  return commentsFromDb.forEach((comment) async {
    allComments.add(new SingleComment(comment[0], comment[1], comment[2], comment[3]));
  }).then(returnComments);
}

如果我将 cmets = await ... 替换为 cmets = [],我的代码可以正常工作。 await 一定有某种错误。我尝试使用 .then 而不是 await,但随后出现错误,我无法在 null 上使用 call。

提前致谢。

【问题讨论】:

    标签: asynchronous async-await dart


    【解决方案1】:

    return discussionsFromDb.forEach((discussion) async { 这一行看起来很奇怪。 forEach 不返回 Future,而是返回 void

    因此).then(returnDiscussions); 无效。

    也许

      await for(var discussion in discussionsFromDb) {
        int discussionId = discussion[4];
        var comments;
        comments = await getCommentsOfDiscussion(discussionId);
        discussionsToReturn.add(new Discussion(discussion[0], discussion[1], discussion[2], discussion[3], comments));
      }
      return discussionsToReturn;
    

    是你想要的

    【讨论】: