这是一段测试代码,很多教程里都有
main() {
print("Main 开始");
A();
print("Main 结束");
}
Future<void> A() async {
print("A 开始执行这个方法~");
print(await B());
// print(B());
print("A 执行结束");
}
Future<String> B() async {
print("B 开始执行这个方法~");
final result = await Future.delayed(Duration(seconds: 3), () => "123");
// final result = await "123";
print("B 执行结束~");
return Future(() => "请求到的数据:" + result.toString());
}
运行结果:
Main 开始
A 开始执行这个方法~
B 开始执行这个方法~
Main 结束
B 执行结束~
请求到的数据:123
A 执行结束
问下各位大佬:
如果一个函数被 async 标记,但内部没有 await ,那么函数内部代码会貌似会同步执行,最后会返回 Future ,这个 Future 是怎么来的?
在 A 函数中不使用 await 调用 B 函数(A 函数的注释行),在遇到 B 函数的 Future.delay 时直接返回了 Future 对象给 A ,这个返回给 A 的 Future 具体是怎么来的?
通过执行结果,并不是所有遇到 await 函数就把当前函数的后半部分抛到 event_looper 里,因为 await 调用 B 函数后,还是会同步调用 B 函数第一行打印语句。那么究竟是什么情况会导致 await 后面的抛到 event_looper ,是有 Future 对象创建出来的时候么?
目前 dart 是可以写 await "123" 代码的,这样写自动变成 await Future.value("123") 么?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.