【发布时间】:2020-06-10 23:40:03
【问题描述】:
我正在使用 await 关键字等待方法完成并返回某些内容,然后使用 switch 语句根据方法返回值执行代码块,但它不会等待它的值,当我尝试打印输出为null的值!
代码如下:
PhoneNumVerification status = await accountRecoveryAdmin.verifyUserPhoneNumber(phoneNum);
print(status); // prints null because it didn't wait for the method to complete
switch (status) {
// some code
}
方法如下:
enum PhoneNumVerification {
failed,
verified,
wrongInput,
smsVerificationNeeded
}
Future<PhoneNumVerification> verifyUserPhoneNumber(String phoneNum) async {
if (phoneNum.isEmpty ||
!phoneNum.startsWith('01') ||
phoneNum.length != 11) {
return PhoneNumVerification.wrongInput;
}
try {
await _auth.verifyPhoneNumber(
phoneNumber: '+2$phoneNum',
timeout: Duration(seconds: 30),
verificationCompleted: (_) {
return PhoneNumVerification.verified;
},
verificationFailed: (exception) {
print(exception.message);
return PhoneNumVerification.failed;
},
codeSent: (String verificationId, [int forceResendingToken]) {
this.verificationId = verificationId;
return PhoneNumVerification.smsVerificationNeeded;
},
codeAutoRetrievalTimeout: null,
);
} catch (e) {
print(e);
return PhoneNumVerification.failed;
}
}
【问题讨论】:
-
确实等了。问题是
verifyUserPhoneNumber没有在其成功路径上返回值。 -
但它确实返回 PhoneNumVerification.verified!
-
verifyUserPhoneNumber的try块不返回任何内容。它传递具有返回值的回调,但这些返回值永远不会返回给verifyUserPhoneNumber的调用者。 -
那我该如何纠正呢?
-
您能否提供正确代码的答案?
标签: dart