You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何确保从数据库获取数据后再执行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 20:05:23