请教各位大佬, Flutter/dart 中, async 返回的 Future 来源问题,以及什么时候会把 await 后面的代码抛到事件循环里

40次阅读

共计 736 个字符,预计需要花费 2 分钟才能阅读完成。

这是一段测试代码,很多教程里都有

main() {print("Main 开始");
  A();
  print("Main 结束");
}

Future A() async {print("A 开始执行这个方法~");
  print(await B());
  // print(B());
  print("A 执行结束");
}

Future 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 执行结束  

问下各位大佬:

  1. 如果一个函数被 async 标记,但内部没有 await,那么函数内部代码会貌似会同步执行,最后会返回 Future,这个 Future 是怎么来的?

  2. 在 A 函数中不使用 await 调用 B 函数 (A 函数的注释行),在遇到 B 函数的 Future.delay 时直接返回了 Future 对象给 A,这个返回给 A 的 Future 具体是怎么来的?

  3. 通过执行结果,并不是所有遇到 await 函数就把当前函数的后半部分抛到 event_looper 里,因为 await 调用 B 函数后,还是会同步调用 B 函数第一行打印语句。那么究竟是什么情况会导致 await 后面的抛到 event_looper,是有 Future 对象创建出来的时候么?

  4. 目前 dart 是可以写 await “123” 代码的,这样写自动变成 await Future.value(“123”) 么?

正文完
 0