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