【发布时间】:2020-05-26 00:51:31
【问题描述】:
我正在尝试在用户登录时从 Firestore 加载一些数据,并且需要等到数据加载完毕才能继续。但是,我等待结果的努力没有奏效。
Future<bool> userListener() async {
_auth.onAuthStateChanged.listen((firebaseUser) {
bool isDone = false;
if (firebaseUser != null) {
isDone = await loadUserData(firebaseUser); // This line is killing me!!
return isDone;
} else {
return false;
}
}, onError: (error) {
print('error in UserListener: $error');
});
}
Future<bool> loadUserData(FirebaseUser user) async {
Firestore database = Firestore();
DocumentReference data = database.collection('userData').document(user.uid);
try {
DocumentSnapshot myQuery = await data.get();
theNumber = myQuery.data['theNumber'];
return true;
} on PlatformException catch (e) {
print(e);
return false;
}
}
我从这行得到一个可爱的错误:
isDone = await loadUserData(firebaseUser);
“await 表达式只能在异步函数中使用”。
我不确定这些函数如何变得更加异步。此外,如果我不添加await,那么我会被告知不能将 Future 分配给 bool,这非常有意义,并向我建议我的函数实际上是异步的。
为什么我不能等待 loadUserData 函数的结果?
【问题讨论】:
标签: asynchronous flutter dart google-cloud-firestore