flutter - 什么时候需要将异步函数的返回类型声明为 future 对象?

标签 flutter dart async-await future

我正在复习有关使用 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/

相关文章:

flutter - 如何在 Flutter web 中使用 .env?

flutter - flutter 朔迷离的Firestore Query Snaphot是否永远为空?

dart - streamController.add() 和 streamController.sink.add() 有什么区别?

flutter - UI在FLUTTER DART中的复选框问题

dart - Dart将其作为构造函数中的参数传递

c# - 如果您知道任务已完成,可以在异步方法中调用 task.Result 吗?

c# - asyncawait的实际例子不符合预期

dart - 如何检查Alert Dialog是否在flutter中打开

flutter - 什么?在 Dart 中做什么?

c# - 转换/包装一个使用回调的 "classic"异步方法