如何确保从数据库获取数据后再执行IF条件判断?
问题解决:让条件判断等待异步数据返回
你的reg()函数存在异步流程错误,导致await reg()无法正确等待数据库请求和后续的Dio请求完成,直接返回了null,所以后续的if条件会提前执行。
问题根源
- 函数内部使用
getData().then(...)但未返回该Future,外层async函数默认返回Future<void>,因此await reg()拿到的是null - try/catch无法捕获
getData()的异步错误,因为.then()的错误不会被外层catch处理
修复后的reg()函数
Future<Response?> reg() async { try { // 用await替代then,让异步流程线性化,确保等待数据库请求完成 final value = await getData(); Dio dio = Dio(); Response response = await dio.get( 'http://${value["serverIP"]}:${value["port"]}/${value["passwordMain"]}/reg/${controllerEmail.text}/${controllerPassword.text}/${controllerUsername.text}'); return response; } catch (e) { // 可添加错误日志,便于调试 print('请求异常: $e'); return null; } }
修复效果
现在reg()函数会先等待getData()从数据库获取完数据,再执行Dio的GET请求,整个函数返回的Future会在所有异步操作完成后才生成结果。调用var response = await reg()时,代码会暂停等待,直到reg()的所有异步流程结束,拿到Response或null后,才会执行后续的if条件判断。
内容的提问来源于stack exchange,提问作者Ableds Gaming
相关产品推荐
相关产品推荐

