Dart-异步编程

synchronous operation:同步操作会阻止其他操作执行到完成。

synchronous function:同步函数仅执行同步操作。

asynchronous operation:异步操作一旦启动,就可以在完成之前执行其他操作。

asynchronous function:异步函数至少执行一个异步操作,也可以执行同步操作。

1、future

future(小写的“ f”)是 Future(大写的“ F”)类的实例。 future表示异步操作的结果,

并且可以具有两种状态:未完成或已完成。uncompleted or completed.

Uncompleted

当您调用异步函数时,它将返回未完成的future。 那个future正在等待函数的异步操作完成或引发错误。

Completed

如果异步操作成功,则future将以一个值完成。 类型为Future <T>的Future的类型为T的值。例如,类型为Future <String>的Future的字符串的值。 如果future未产生可用价值,则该future的类型为Future <void>。

否则,它会以错误完成。

2、要定义异步函数,请在函数主体之前添加async:

await关键字仅在异步函数中起作用。

如果函数具有声明的返回类型,则将类型更新为Future <T>,其中T是函数返回的值的类型。如果该函数未明确返回值,则返回类型为Future <void>

Future<String> reportUserRole() async {

  var username = await fetchRole();

  return 'User role: $username';

}

3、错误处理

Future<void> printOrderMessage() async {

  try {

    var order = await fetchUserOrder();

    print('Awaiting user order...');

    print(order);

  } catch (err) {

    print('Caught error: $err');

  }

}

Future<String> fetchUserOrder() {

  // Imagine that this function is more complex.

  var str = Future.delayed(

      Duration(seconds: 4),

      () => throw 'Cannot locate user order');

  return str;

}

Future<void> main() async {

  await printOrderMessage();

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。