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

Dart异步函数未等待返回值:为何输出null?

Dart异步函数返回null问题解答

你编写的异步函数test()调用后先打印Function has started,随后输出null,核心原因是你没有在test()中返回Future.delayed生成的Future,也没有等待它完成。

对比官方示例与你的代码

官方示例中:

Future<String> fetchUserOrder() {
  return Future.delayed(const Duration(seconds: 4), () => 'Large Latte');
}

fetchUserOrder直接返回了Future.delayed创建的Future,后续printOrderMessage通过await等待这个Future完成并获取返回值。

而你的代码:

Future<int?> test() async{
  print('Function has started');
  Future.delayed(Duration(milliseconds: 2000), () {
    return 4;
  });
}

test()函数内部只是创建了Future.delayed,但既没有返回这个Future,也没有用await等待它执行完毕。由于async函数如果没有显式返回值,会默认返回一个Future<void>,但你声明的返回类型是Future<int?>,所以函数会自动返回一个承载null的Future,这就导致main中await test()得到的是null。

修正方案

有两种方式可以解决这个问题:

方式1:直接返回Future.delayed

void main() async {
  int? value;
  value = await test();
  print(value); // 2秒后输出4
}

Future<int?> test() {
  print('Function has started');
  return Future.delayed(Duration(milliseconds: 2000), () {
    return 4;
  });
}

这里可以去掉async,因为不需要在函数内部使用await,直接返回Future即可。

方式2:用await等待Future完成后返回值

void main() async {
  int? value;
  value = await test();
  print(value); // 2秒后输出4
}

Future<int?> test() async{
  print('Function has started');
  var result = await Future.delayed(Duration(milliseconds: 2000), () {
    return 4;
  });
  return result;
}

通过await等待Future.delayed执行完成,获取结果后再返回。

内容的提问来源于stack exchange,提问作者Sachu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 19:50:26