gpt4 book ai didi

flutter - 为什么我的异步函数会在每个等待时返回Future 停顿?

转载 作者:行者123 更新时间:2023-12-03 04:25:53 28 4
gpt4 key购买 nike

我使用此函数的目标是返回一个整数,该整数代表用户完成的所有习惯。我的数据库结构是习惯的集合,每个习惯都有一个包含其历史的子集合。下面的函数利用习惯列表,并使用习惯ID来获取该习惯的历史记录。我的问题是,当我尝试循环浏览每种习惯的历史记录时,它停留在await for上。任何建议,将不胜感激,我仍在尝试完全理解流/异步功能。

Future<int> getCompleteHabits(User user, List<Habit> habits) async {
int completed = 0;
if(habits.isNotEmpty) {
for(Habit habit in habits) {
Stream<List<HabitHistory>> streamHistory = db.streamHabitHistory(user, habit.id);
await for(var h in streamHistory){
print(habit.title);
print(h);
}
print("test");
}
}
return completed;
}
但是,此功能将添加到完成的变量中,因为我无法访问所有尚未执行的历史记录。
此函数将以下内容打印到控制台,而不打印到 print("test")

flutter: Get in bed by 11:30 pm

flutter: [Instance of 'HabitHistory', Instance of 'HabitHistory', Instance of 'HabitHistory', Instance of 'HabitHistory', Instance of 'HabitHistory']

最佳答案

documentaion on Streams:

Streams are done when there are no more events in them, and the code receiving the events is notified of this just as it is notified that a new event arrives. When reading events using an await for loop, the loops stops when the stream is done.



您的循环挂起的原因是流尚未关闭。它将继续挂起,直到关闭流或直到您在循环中执行 breakreturn语句为止。

关于flutter - 为什么我的异步函数会在每个等待时返回Future <int>停顿?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59827292/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com