异步

Dart 的底层实现跟 JavaScript/Node.js 类似,是单线程且"天生"异步的,而对比 Node.js,Dart 标准库对异步的支持更加全面且统一。

Dart 通过async/await关键字声明异步代码,通过dart:async库的FutureStream表示异步操作。

核心概念

async用于声明异步函数,await用于调用异步函数,且await只能在异步函数中使用。

Future代表一个异步执行的操作(数据),而Stream表示一连串异步操作(数据)。异步操作返回的可能是正常的数据,也可能是错误。

一般情况下,FutureStream只参与异步函数的声明就足够了,只是在某些复杂场景下才需要直接使用它们。

基础用法

async关键字放置于函数体之前,函数就变为异步;在同步函数调用之前添加await即变为异步调用;

// 使用async声明异步函数
// 因为有类型推断,函数返回值可以不写,但不推荐
asyncHello() async {
  return 'hello'; // 结果将被封装在Futrue中,即实际返回类型是 Future<String>
}

// 使用await调用异步函数,注意main本身也是异步
main() async {
  var t = await asyncHello();
  print(t);
}

和同步调用一样,async/await也是使用trycatchfinally进行错误处理

try {
  var result = await asyncFn();
} catch (e) {
  // 错误处理
}

进阶使用

// TODO:

results matching ""

    No results matching ""