[英]Why isn't it run await
print(2);
print(_emailTaken);
print(2);
await isRegister(emailController.value.text);
print(3);
print(_emailTaken);
print(3);
和我的 isRegister 方法
Future<void> isRegister(String email) async {
fireStore.collection('Users').doc(email).get().then((DocumentSnapshot ds) {
print(1);
print(ds.exists);
print(1);
_emailTaken = ds.exists;
});
}
但是 output 是
我/撲 (20531): 2
我/顫動(20531):假
我/撲 (20531): 2
我/撲 (20531): 3
我/顫動(20531):假
我/撲 (20531): 3
我/撲 (20531): 1
我/撲 (20531): 是的
我/撲 (20531): 1
為什么不在 await 語法中等待?
您不是在等待 get inside 注冊 function。因此要修復它,請將其更改為以下內容:
Future<void> isRegister(String email) async {
await fireStore.collection('Users').doc(email).get().then((DocumentSnapshot ds) {
print(1);
print(ds.exists);
print(1);
_emailTaken = ds.exists;
});
}
要么:
Future<void> isRegister(String email) {
return fireStore.collection('Users').doc(email).get().then((DocumentSnapshot ds) {
print(1);
print(ds.exists);
print(1);
_emailTaken = ds.exists;
});
}
print(2);
print(_emailTaken);
print(2);
await isRegister(emailController.value.text);
print(3);
print(_emailTaken);
print(3);
和我的 isRegister 方法
Future<void> isRegister(String email) async {
fireStore.collection('Users').doc(email).get().then((DocumentSnapshot ds) {
print(1);
print(ds.exists);
print(1);
_emailTaken = ds.exists;
});
}
但 output 是
我/顫振(20531):2
我/顫動(20531):假
我/顫振(20531):2
我/顫振(20531):3
我/顫動(20531):假
我/顫振(20531):3
我/顫振(20531):1
我/顫振(20531):真
我/顫振(20531):1
為什么不在 await 語法中等待?
您也可以返回Future
,而不是像 Kishan 建議的那樣在您的isRegister
中awaiting
:
Future<bool> isRegister(String email) {
return fireStore
.collection('Users')
.doc(email)
.get()
.then((DocumentSnapshot ds) => _emailTaken = ds.exists);
}
注意:一個額外的好處是isRegister
的返回現在是Future<bool>
。 結果仍然緩存在_emailTaken
中以供將來參考,但也由您的方法直接返回。
return
的最小工作示例:bool x = false;
Future<bool> _fetchData() {
return Future.delayed(Duration(seconds: 1)).then((_) => x = true);
}
Future<void> main() async {
print('1. $x');
print('2. ${await(_fetchData())}');
print('3. $x');
await Future.delayed(Duration(seconds: 1));
print('4. $x');
}
結果是:
1. false
2. true
3. true
4. true
return
的最小工作示例:bool x = false;
Future<void> _fetchData() async {
Future.delayed(Duration(seconds: 1)).then((_) => x = true);
}
Future<void> main() async {
print('1. $x');
await(_fetchData());
print('3. $x');
await Future.delayed(Duration(seconds: 1));
print('4. $x');
}
結果是:
1. false
3. false
4. true
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.