Asynchronous 等待表达式只能在异步函数中使用
当用户登录时,我试图从Firestore加载一些数据,需要等待数据加载后才能继续。然而,我等待结果的努力没有奏效Asynchronous 等待表达式只能在异步函数中使用,asynchronous,flutter,dart,google-cloud-firestore,Asynchronous,Flutter,Dart,Google Cloud Firestore,当用户登录时,我试图从Firestore加载一些数据,需要等待数据加载后才能继续。然而,我等待结果的努力没有奏效 Future<bool> userListener() async { _auth.onAuthStateChanged.listen((firebaseUser) { bool isDone = false; if (firebaseUser != null) { isDone = await loadUserData(firebas
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;
}
}
“等待表达式只能在异步函数中使用”
我不确定这些函数如何能变得更异步。此外,如果我不添加await
,那么我被告知未来不能分配给bool,这非常合理,并向我建议我的函数实际上是异步的
为什么我不能等待我的
loadUserData
函数的结果?该行的主要函数是传递给侦听onAuthStateChanged的函数。该函数也应该是异步的,如下所示
_auth.onAuthStateChanged.listen((firebaseUser) async{
如果您正在调用一个异步函数,那么您的调用函数也应该是异步的 将async关键字添加到函数中。更改:
void main (List<String> arguments)
void main(列出参数)
致:
void主(列表参数)异步
示例:
Future<void> main (List<String> arguments) async {
var done = await readFileByteByByte(); // perform long operation
}
Future<void> main(List<String> arguments) {
readFileByteByByte().then((done) {
print('done');
});
print('waiting...');
print('do something else while waiting...');
}
Future主(列表参数)异步{
var done=wait readfilebytebybyyte();//执行长操作
}
未来主参数(列表参数){
ReadFileByteByByByByte()。然后((完成){
打印(“完成”);
});
打印('等待…');
打印('等待时做其他事情…');
}
谢谢。现在这似乎是显而易见的。
void main (List<String> arguments) async
Future<void> main (List<String> arguments) async {
var done = await readFileByteByByte(); // perform long operation
}
Future<void> main(List<String> arguments) {
readFileByteByByte().then((done) {
print('done');
});
print('waiting...');
print('do something else while waiting...');
}