Dart/Flutter中为何该await关键字是不必要的?
关于return中不必要await的问题
- 核心点在于async函数的本质:只要是async标记的函数,不管你return什么,最终都会自动把返回值包装成Future对象返回。
- 举个实际例子:
你写这样的代码:
和直接写:Future<int> fetchNum() async { return await Future.value(42); }
效果完全一致。因为Future<int> fetchNum() async { return Future.value(42); }await Future.value(42)会先拿到int值42,然后async函数又把这个42包装成Future返回;而直接return Future.value(42)的话,async函数发现返回的已经是Future,就直接把它透传出去了,最终对外的返回结果没有任何区别。 - 你之前的误解是觉得要拿到“值”而非Future,但其实async函数的返回类型注定是Future——不管你return的是原始值还是Future对象,最终对外返回的都是Future。所以在return语句里await一个Future属于多此一举:既不会改变最终返回的类型,还会多一次异步调度的额外开销。
- 那什么时候必须用await?当你需要在return之前用这个Future的结果做其他同步操作的时候,比如:
这种场景下await就是必要的。Future<int> fetchNum() async { final num = await Future.value(42); print(num); // 需要先拿到值做打印,这时候必须await return num; }
内容的提问来源于stack exchange,提问作者MetaStack
相关产品推荐
相关产品推荐

