Asynchronous Dart-未来内部的未来无法正常运行

Asynchronous Dart-未来内部的未来无法正常运行,asynchronous,async-await,dart,Asynchronous,Async Await,Dart,所以我有这个代码: getAllDiscussionsFromDb() async { List<Discussion> discussionsToReturn = []; List<Discussion> returnDiscussions(var args){ return discussionsToReturn; } var discussionsFromDb = await database.query("select * from

所以我有这个代码:

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);
}
getAllDiscussionsFromDb()异步{
列表讨论存储返回=[];
列表返回讨论(变量args){
返回讨论返回;
}
var discussionsFromDb=await database.query(“从讨论中选择*);
//我们必须从数据库列实例化实际的讨论对象
返回discussionsFromDb.forEach((讨论)异步{
int discussionId=讨论[4];
var评论;
comments=Wait getCommentsOfDiscussion(discussionId);
discussionsToReturn.add(新讨论(讨论[0]、讨论[1]、讨论[2]、讨论[3]、评论));
}).然后(返回讨论);
}
它唯一的问题是注释=。。。线路

这是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);
}
getCommentsOfDiscussion(id)异步{
列出所有注释=[];
列表返回注释(变量args){
返回所有评论;
}
var commentsFromDb=await database.query(“从评论中选择*,其中discussionId=$id”);
//我们必须从数据库列实例化实际的SingleComment对象
返回commentsFromDb.forEach((comment)async{
添加(新的单一注释(注释[0]、注释[1]、注释[2]、注释[3]);
}).然后(回复评论);
}
如果我替换注释=等待。。。对于comments=[],我的代码运行得非常好。等待一定是出了什么差错。我试着使用。然后代替等待,但是我得到一个错误,我不能在null上使用call


提前感谢。

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

因此,
)。然后(返回讨论);
无效

或许

  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;
这就是你想要的