《深入浅出Dart》Dart的异步编程

2023-07-27 15:44:14 浏览数 (2)

现代JavaScript高级小册

深入浅出Dart

现代TypeScript高级小册

Dart的异步编程

在 Dart 中,我们使用 Futureasync/await 来进行异步编程。当你调用一个异步函数时,它将立即返回一个 Future 对象。当异步操作完成时,Future 将被“完成”或“解析”。

使用 Future

Future 是 Dart 中用于表示异步操作的对象。当你调用一个异步函数时,它会立即返回一个 Future 对象,表示这个异步操作的结果。

Future 对象有三种状态:

未完成:异步操作还没有完成。 完成(resolved):异步操作成功完成,并返回一个值。 错误(rejected):异步操作失败,并返回一个错误。

如果你了解Javascript中的Promise,那么就能非常简单掌握Future了

一个简单的 Future 示例如下:

代码语言:javascript复制
Future<String> fetchUserOrder() {
  // 模拟网络延迟
  return Future.delayed(Duration(seconds: 2), () => 'Large Latte');
}

void main() {
  print('Fetching user order...');
  fetchUserOrder()
      .then((order) => print('Your order is: $order'))
      .catchError((error) => print(error));
}

在这个示例中,fetchUserOrder 是一个异步函数,它使用 Future.delayed 来模拟网络延迟。当调用 fetchUserOrder 时,它立即返回一个 Future<String> 对象。然后我们使用 thencatchError 来处理 Future 的成功和错误结果。

使用 async/await

你也可以使用 async/await 关键字来更简洁地处理异步操作。一个使用 async/await 的示例如下:

代码语言:javascript复制
Future<String> fetchUserOrder() {
  return Future.delayed(Duration(seconds: 2), () => 'Large Latte');
}

Future<void> main() async {
  print('Fetching user order...');
  try {
    var order = await fetchUserOrder();
    print('Your order is: $order');
  } catch (error) {
    print(error);
  }
}

在这个示例中,我们使用 async 关键字来标记 main 函数是一个异步函数。然后我们使用 await 关键字来等待 fetchUserOrder 的结果。如果 fetchUserOrder 抛出一个错误,我们可以使用 try/catch 来处理这个错误。

需要注意的是,你只能在 async 函数中使用 await 关键字。

0 人点赞