Dart 编程中的 Future 类


Dart 中有许多不同的类和关键字,当我们想要运行异步代码时可以使用它们。**future** 类允许我们运行异步代码,并且可以帮助我们避免回调地狱。**future** 主要表示异步操作的结果。

在 Dart 中,有很多标准库调用会返回一个 future,其中一些是:

  • http.get

  • SharedPreference.getInstance()

Dart 中的 future 可以有两种状态:

  • **已完成** - 当 future 的操作完成并且 future 以一个值或错误完成时。

  • **未完成** - 当一个函数被调用并且它返回一个 future 时,该函数会排队并返回一个未完成的 future。

语法

Future<T>

在 Dart 中,如果一个 future 不会产生任何可用的值,那么该 future 的类型为 Future<void>。此外,如果函数没有显式地返回值,那么返回类型也是 Future<void>。

示例

让我们考虑一个简单的例子,其中我们声明一个 future,它将以延迟的方式显示一条消息。

Consider the example shown below:
   Future<void> printDelayedMessage() {
      return Future.delayed(Duration(seconds: 4), () => print('Delayed Output.'));
}

void main() {
   printDelayedMessage();
   print('First output ...');
}

在上面的示例中,我们有一个名为 **printDelayedMessage()** 的函数,它返回一个 void 类型的 future,并且我们有一个 future 使用名为 delayed 的方法,通过该方法我们可以将延迟输出打印到终端。

输出

First output ...
Delayed Output.

需要注意的是,输出的第二行将在 4 秒后打印。

Dart 中的 Futures 还允许我们使用 then 方法注册回调。

示例

请考虑以下示例:

void main() {
   var userEmailFuture = getUserEmail();
   // register callback
   userEmailFuture.then((userId) => print(userId));
   print('Hello');
}

// method which computes a future
Future<String> getUserEmail() {
   // simulate a long network call
   return Future.delayed(Duration(seconds: 4), () => "[email protected]");
}

输出

Hello
[email protected]

更新于: 2021年5月21日

416 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告