Dart中print('object')为何先于getData()执行?异步机制疑问
为什么
print('object')会在getdata()完成前执行? 这是Dart异步编程的核心特性导致的,和你熟悉的同步编程逻辑存在差异,拆解原因如下:
1. async函数调用不会阻塞后续代码
当你在initState()里调用getdata()这个async函数时,它不会从头到尾执行完再返回——而是立刻返回一个Future对象,程序直接跳到下一行执行print('object'),完全不会等待getdata()内部的耗时操作完成。
2. await只暂停当前async函数内部的流程
await关键字的作用范围仅限于它所在的async函数内部:在getdata()里,await Future.delayed(...)会让getdata()自身暂停3秒,等延迟任务完成后再执行后面的print('Hey')和print(parth),但这个暂停不会影响initState()里getdata()之后的代码执行。
3. 你的示例代码执行顺序
具体流程是:
- 进入
initState(),先执行super.initState() - 调用
getdata(),函数开始执行,遇到await Future.delayed(...),把这个3秒延迟任务扔到Dart的事件队列里,随后getdata()暂时挂起,回到initState() initState()继续执行print('object'),这行是同步代码,立刻输出- 3秒后,事件队列里的延迟任务完成,Dart回到
getdata()里继续执行剩余代码,输出Hey和parth
如何让print('object')在getdata()之后执行?
因为Flutter的initState()不能标记为async,可以用Future.then()的方式实现:
void initState() { super.initState(); getdata().then((_) { print('object'); }); }
或者直接把print('object')移到getdata()的最后:
void getdata() async { String parth = await Future.delayed(Duration(seconds: 3), () { return 'parth'; }); print('Hey'); print(parth); print('object'); }
内容的提问来源于stack exchange,提问作者Parth Badkul
相关产品推荐
相关产品推荐

