我正在复习有关使用 Dart 进行异步编程的类(class),但出于某种原因,我有点困惑。我想我理解你应该如何使用异步函数的概念,当它可能需要一些时间时,而不是阻塞和卡住你的应用程序,你使用异步函数,以便执行下一个代码块或方法,以及何时执行异步函数完成或准备执行。 (如有不妥之处请指出)
但是,我并没有真正理解 Future<> 部分。我知道它可以用作异步函数的返回类型,因为本质上你是说该函数现在返回一个 future 的对象,但让我们在它完成后回到它。但是我的导师让我有点困惑,有时她有一个 future 作为返回类型,而另一次她没有把它放在一起,而且它们都是异步函数。所以现在我很难理解什么时候有必要显式声明 Future 返回类型,即使它是无效的?也不只是使用异步并等待已经创建 future 对象的函数吗?非常感谢任何澄清,谢谢。
最佳答案
是的,使用 async 关键字将使函数自动返回 Future。
即使是 void 函数,也最好显式声明函数的返回类型,否则,编译器会将函数解释为具有动态返回类型。
这也将有助于/使读者更容易了解函数的返回类型。
此外,您需要将对象包装在 Future 中的异步函数中,如下所示:
Future<Object> getObject() async {
final object = await timeConsumingTask();
return object;
}
如果不包裹就这样写:
Object getObject() async {
final object = await timeConsumingTask();
return object;
}
编译器抛出错误:标记为“async”的函数必须具有可分配给“Future”的返回类型。
对于 void 函数,似乎你不必将返回类型包装在 Future 中,所以像这样就可以了:
void doSomething() async {
await timeConsumingTask();
print('done');
}
关于flutter - 什么时候需要将异步函数的返回类型声明为 future 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56520364/