美文网首页
Dart异步编程Future

Dart异步编程Future

作者: Yxjie | 来源:发表于2019-05-15 19:54 被阅读0次

Dart是单线程编程语言,如果执行了阻塞线程代码就会造成程序卡死,异步操作就是为了防止这一现象。
Future类似于ES6中Promise,也提供了then和catchError链式调用。

Future常见用法

  • 使用future.then获取future值or获取异常
  • 通常结合async和await使用
  • future.whenComplete
  • future.timeout
future.then使用
main() {
  testFuture().then((value){
    print(value);
  },onError: (e) {
    print("onError: \$e");
  }).catchError((e){
    print("catchError: \$e");
  });
}

Future<String> testFuture() {
   return Future.value("Hello");
//  return Future.error("yxjie 创造个error");//onError会打印
//  throw "an Error";
}

注:直接throw "an Error"代码会直接异常不会走 catchError方法,因为throw返回的数据类型不是Future<T>类型,then方法onError未可选参数,代码异常时会被调用【代码中有onError回调,catchError不会执行】

async和await使用
import 'dart:async';
test() async {
  var result = await Future.delayed(Duration(milliseconds: 2000), ()=>Future.value("hahha"));
  print("time = \${DateTime.now()}");
  print(result);
}


main() {
  print("time start = \${DateTime.now()}");
  test();
  print("time end= \${DateTime.now()}");

  //执行结果:
  //time start = 2019-05-15 19:24:14.187961
  //time end= 2019-05-15 19:24:14.200480
  //time = 2019-05-15 19:24:16.213213
  //hahha
}
future.whenComplete使用

此方法类似于java中try{}catch(){}finally{}异常捕获的finally

main() {
  Future.error("yxjie make a error")
      .then(print)
      .catchError(print)
      .whenComplete(() => print("Done!!!"));
  
  //执行结果:
  //yxjie make a error
  //Done!!!
}

以上demo用了方法对象以及插值表达式,不了解方法对象可以参考此文

future.timeout使用

异步操作可能需要很长时间,如访问数据库or网络请求等,我们可以使用timeout来设置超时操作。

main() {
  Future.delayed(Duration(milliseconds: 3000), () => "hate")
      .timeout(Duration(milliseconds: 2000))
      .then(print)
      .catchError(print);
  //TimeoutException after 0:00:00.002000: Future not completed
}

相关文章

  • Dart异步编程-future

    Dart异步编程包含两部分:Future和Stream该篇文章中介绍Future 异步编程:Futures Dar...

  • dart异步

    Dart中的异步 Dart语言的异步编程之Future和async-await是杀手级功能

  • 基于FutureBuilder通用网络请求界面封装

    基于FutureBuilder通用网络请求界面封装 Dart异步编程Future 在Dart中,处理异步有两种方式...

  • Flutter -- 9.异步编程

    一.使用Future异步编程 Dart中使用Future完成异步操作 1.基本的异步代码示例 任务代码块,执行的异...

  • Dart异步编程Future

    Dart是单线程编程语言,如果执行了阻塞线程代码就会造成程序卡死,异步操作就是为了防止这一现象。Future类似于...

  • [Dart] Future

    异步编程 Dart中通过 Future 和 Stream 实现异步,谈论他们之前,先简单了解一下什么叫异步。 As...

  • Dart中的异步编程——Future、async和await

    转载地址:Dart中的异步编程——Future、async和await[https://mp.weixin.qq....

  • Dart 异步编程注意事项

    前言 Dart 语言提供了多种异步编程方式,比如 Future,比如async / await,再比如 Strea...

  • Flutter 之 Stream

    Future和Stream类是Dart异步编程的核心。Future 表示一个不会立即完成的计算过程。与普通函数直接...

  • Dart异步编程-Future使用

    Future 是在未来某个时间获得想要对象的一种手段.1、定义一个名为ff的future,返回字符串。 2、fut...

网友评论

      本文标题:Dart异步编程Future

      本文链接:https://www.haomeiwen.com/subject/ydmmaqtx.html