我有一个名为会话的集合,在每个会话中都有一个教练 ID,它是用户文档的文档 ID。我正在尝试读取所有会话,然后对于每个会话我想获取用户文档,教练列表(用户)将 bloc 留空,我认为这是异步任务的问题。
List<Session> sessions;
List<MyUser> coaches;
yield AdminsessionsLoading();
await datasource
.fetchMonthSessions(event.month, event.year)
.then((data) async => {
sessions = data,
data.forEach((session) async => {
await adminDatasource
.fetchUser(session.coachId)
.then((coach) => coaches.add(coach))
})
});
//after fetching sessiosn, fetch the coaches
print(coaches);
print("Sessions Fetched " +
" - Sessions : " +
sessions.length.toString() +
" - Coaches : " +
coaches.length.toString());
yield AdminsessionsLoaded(sessions: sessions, coaches: coaches);
}
我以正确的方式阅读教练和课程的正确方法是什么?
答案 0 :(得分:1)
.forEach()
没有返回值,你不能等待它——所以当你的代码产生多个异步任务时,它不会等待它们中的任何一个。你可以使用
await Promise.all(
data.map((session) async => {
await adminDatasource
.fetchUser(session.coachId)
.then((coach) => coaches.add(coach))
})
});
);
等待所有完成(.map()
将返回一组承诺)。这是异步代码中 .forEach()
的巨大限制。