程序尝试处理尚未检索到的数据。我做了大量的展示来验证这确实发生了。
这是我在Stateless小部件中的代码:……
Print(“before calling getDocs()”)
getDocs(); // retrieves data from Firestore
Print(“after calling getDocs()”)
处理getDocs()函数检索到的数据……
getDocs()在任何类或Widget 之外定义
void getDocs() async {
print("******inside getDocs() start*****************");
await FirebaseFirestore.instance.collection('Spanish').get().then((snapshot) {
print("********inside getDocs() 1");
....
print("******inside getDocs() end*****************");
这就是我在日志上看到的:
before calling getDocs()
******inside getDocs() start*****************
******inside getDocs() end*****************
after calling getDocs()
********inside getDocs() 1
结果是一个错误-程序试图处理尚未检索到的数据。getDocs()中的另一个显示显示数据已正确接收。问题-当数据还不可用时,如何防止程序处理数据?
由于getDocs
被声明为async
函数,如果您想等到它完成后再继续处理,则需要用await
调用它:
因此:
await getDocs();
如果您所在的环境中不能使用await
,则可以附加一个then
处理程序:
getDocs().then(() {
... do whatever needs to happen after getDocs() is done here
})