Dart 为什么异步方法需要返回未来?

Dart 为什么异步方法需要返回未来?,dart,Dart,我正试着把头绕过去。我必须理解错误 例如: Future A() { ..} Future B() async{ await A(); print "123"; } 为什么B需要返回一个Future? waitmakeB()是否同步?i、 例如,它等待A完全完成,然后执行print语句 那么,B返回一个Future的必要性是什么?async和wait不进行异步执行同步。没有办法做到这一点 所有async和await所做的就是使异步代码看起来更像同步代码。它只是

我正试着把头绕过去。我必须理解错误

例如:

Future A() { ..}

Future B() async{
   await A();
   print "123";
}
为什么
B
需要返回一个
Future
wait
make
B()
是否同步?i、 例如,它等待
A
完全完成,然后执行
print
语句


那么,
B
返回一个
Future
的必要性是什么?

async
wait
不进行异步执行同步。没有办法做到这一点

所有
async
await
所做的就是使异步代码看起来更像同步代码。它只是语法上的糖。使用
async
wait
可以完成的所有事情也可以不用它来完成


与深度嵌套的
.then(…then(…then(…).catchError()).catchError(…)
不同的语句不同,对于循环,
try
catch
,可以使用
finally
,这使得代码更易于编写、阅读和推理

在Dart语言中,
async
修饰符允许在异步函数中使用扩展语法(当然,在大多数情况下,异步函数在未完成之前不能立即返回结果,它们返回一个在Dart a
future
中调用的未来结果包装)

使用扩展语法意味着,如果编写同步操作,则可以以相同的方式编写异步操作

为了能够在单个函数中同时使用同步和异步操作,扩展语法允许使用运算符
wait


使用操作符
await
时,异步操作看起来像是同步操作,因为操作符
await
执行的工作可以被称为
异步等待,直到操作未完成

如果
await
的行为与其他语言(如JavaScript/C)中的行为相同,则不会执行该操作不是等待,而是让您编写异步执行的同步代码——请参阅JavaScript解释——您可以将“等待”理解为“异步等待”的意思。换句话说,它在逻辑上是一种等待(从某种意义上说,它在
a
完成之前不会执行
B
的其余部分);但它也是异步的(从某种意义上说,它不会阻止
B
的调用者)。由于逻辑等待操作是异步的,因此它强制
B
是异步的(从而返回
Future
)。这意味着
async
通过代码“增长”。这一点一开始可能令人担忧,但却是完全自然的。