【发布时间】:2021-09-09 02:14:18
【问题描述】:
这是我的代码
Future<List<Record>> getRecordElements() async {
int i=0;
String at;
var cont =0;
List<String> name= [];
var db = await FirebaseDatabase.instance.reference().child("Volunteers/"+widget.vname+"/Records");
db.once().then((DataSnapshot snapshot){
Map<dynamic, dynamic> values = snapshot.value;
print(values);
values.forEach((key,values) async {
if(values["cont"]!=null){
//Few complicated operations
values.forEach((key,values) {
print(values);
if(key=="name"){
name.add(values);
}
});
});
});
print("name " + name.toString());
//few more operations
return items;
}
我已经修改了代码中不相关的部分。
问题是,name 是一个数组,其值是从数据库中获取的。只有数组设置好后,才能继续执行。
但是发生的事情是name 在设置之前就被打印出来了。因此,之后的其他操作也会受到影响。
我需要先完成抓取,然后才能继续。
请帮忙
【问题讨论】:
-
除了
.forEach问题(不清楚为什么你将它的回调标记为async,因为它似乎没有做任何异步工作,除非那部分被省略),你忽略了awaitdb.once().then()的结果(然后调用.then无论如何都是不必要的)。
标签: multithreading flutter dart asynchronous