Dart中处理异步操作

2020-11-16  本文已影响0人  刘铁崧

Dart中的异步操作使用Future、async、await

Future

  void initState() {
    // TODO: implement initState
    super.initState();
    print("123123");
    getNetworkData().then((String value){
      print(value);
    }).catchError((error){//异常捕获
      print(error);
    }).whenComplete((){
      print("执行完成");
    });
  }
  Future<String> getNetworkData(){
    return Future(
        (){
          sleep(Duration(seconds: 3));
          // return "Finished";
          throw Exception("发现异常");//抛出异常
        }
    );
  }

链式调用

  void initState() {
    // TODO: implement initState
    super.initState();
    print("开始请求数据");
    getNetworkData().then((String value){
      print("最终:$value");
    }).catchError((error){//异常捕获
      print(error);
    }).whenComplete((){
      print("执行完成");
    });
  }

  Future<String> getNetworkData(){
    return Future((){
          sleep(Duration(seconds: 1));
          return "第一次请求数据";
          throw Exception("发现异常");//抛出异常
        }).then((value){
          print("2:$value");
          sleep(Duration(seconds: 1));
          throw Exception("第二次发现异常");
        }).then((value){
          print("3:$value");
          sleep(Duration(seconds: 1));
          return "第三次请求数据";
        });
  }
Performing hot restart...
Syncing files to device iPhone 12 Pro Max...
Restarted application in 416ms.
flutter: 开始请求数据
flutter: 2:第一次请求数据
flutter: Exception: 第二次发现异常
flutter: 执行完成

value()

Future.value("123").then((value){
      print(value);
});
打印:
flutter: 123

delayed()延迟执行

Future.delayed(Duration(seconds: 1)).then((value){
      print("延迟1s执行");
});

await、async的使用

await和async是dart语言中的关键字,用来实现异步调用
通常一个async函数会返回一个Future

使用async进行异步调用:

  void initState() {
    // TODO: implement initState
    super.initState();
    getData().then((value){
      print("异步获取结果:$value");
    });
  }
  // 使用async返回的结果必须为Future
  Future getData() async{
    return "结束后调用";
  }

await + async代替Future的链式调用


  void initState() {
    // TODO: implement initState
    super.initState();
    testDataGetting().then((value){
      print(value);
    }).catchError((error){
      print(error);
    });
  }
  Future testDataGetting() async {
    var response1 = await getData("测试1");
    var response2 = await getData("测试2:"+response1);
    var response3 = await getData("测试3:"+response2);
    throw Exception("发现异常");
    // return response3;
  }
  // 使用async返回的结果必须为Future
  Future getData(String message) async{
    return Future((){
      return "拼接数据: " + message;
    });
  }
打印:
flutter: 拼接数据: 测试3:拼接数据: 测试2:拼接数据: 测试1
上一篇下一篇

猜你喜欢

热点阅读