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
相关产品推荐
相关产品推荐

