gpt4 book ai didi

firebase - 异步函数中的异步操作

转载 作者:行者123 更新时间:2023-12-03 03:52:07 27 4
gpt4 key购买 nike

例如,假设我在 initState 中调用一个函数,该函数从 Firebase 集合中获取一些文档。我正在使用 async forEach 迭代这些文档,并且需要执行等待操作以从 firebase 的另一个集合中获取一些数据并将它们保存在列表中,然后在 forEach 完成后返回。但是返回的列表是空的,因为第二个 await 函数在 return 语句之后完成。我该如何处理?我很难理解异步编程,因此非常感谢您提供详细的解释。
此处的代码只是显示实际场景的示例代码。

Future getList() async {

//These are just example refs and in the actual refs it does print actual values
var collectionOneRef = Firestore.instance.collection('Collection1');
var collectionTwoRef = Firestore.instance.collection('Collection2');
List<Map<String, dynamic>> properties = [];

QuerySnapshot querySnapshot = await collectionOneRef
.getDocuments()
.then((query) {
query.documents.forEach((colOneDoc) async {
var colOneID = colOneDoc.documentID;
await collectionTwoRef.document(colOneID).get().then((colTwoDoc) {
Map<String, dynamic> someMap = {
"field1": colTwoDoc['field1'],
"field2": colTwoDoc['field2']
};

properties.add(someMap);

properties.sort((p1, p2) {

//sorting based on two properties
var r = p1["field1"].compareTo(p2["field1"]);
if (r != 0) return r;
return p1["field2"].compareTo(p2["field2"]);
});

print(properties); //this prints actual data in it

));
});
});
});

print(properties); //This prints a blank list as [] and obviously returns blank list

return properties;
}
现在,当我在有状态 Widget 的 initState 中调用此函数并将其显示在某处时,它会显示一个空白列表。但是,在我“热重载”之后,它就会显示出来。我想获取数据并在不热重载的情况下显示它。提前致谢

最佳答案

听起来您需要在调用 getList() 的代码块中等待整个函数本身.
您正在函数内部进行异步和等待,这看起来很好,这就是为什么您在热重载时得到结果的原因。但可能是您实际上并没有在调用它的代码中等待整个函数本身。请检查。

关于firebase - 异步函数中的异步操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62746233/

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