Flutter 异步编程

2019-10-31  本文已影响0人  StevenHu_Sir

1.Future简介

是一个Future 自身的泛型对象 Future<T>对象。

async和await

getData() async{
   return await http.get(Uri.encodeFull(url), headers: {"Accept": "application/json"});
}
//然后调用函数来获取结果
String data = getData();

单线程

一旦一个函数开始执行,就必须将这个函数执行完,才能去执行其他函数。
Dart中没有线程的概念,只有isolate,每个isolate都是隔离的,并不会共享内存。一个Dart程序是在Main isolate中的main函数开始,而在Main函数结束后,Main isolate线程开始一个个(one by one)的处理Event Queue中的每一个Event。

效果图

2.Future的使用

future里面有几个函数:
then:异步操作逻辑在这里写。
whenComplete:异步完成时的回调。
catchError:捕获异常或者异步出错时的回调。

void testFuture(){
    Future future = new Future(() => null);
    future.then((_){
      print("then");
    }).catchError((_){
      print("catchError");
    }).whenComplete((){
      print("whenComplete");
    });
  }

2.1常用的Future构造函数

new Future((){
    //  doing something
});

2.2将一个大任务拆成很多小任务一步步执行时,就需要使用到Future.then函数来拆解任务

void main(){
new Future(() => futureTask)  //  异步任务的函数
        .then((m) => "futueTask execute result:$m")  //   任务执行完后的子任务
        .then((m) => m.length)  //  其中m为上个任务执行完后的返回的结果
        .then((m) => printLength(m))
        .whenComplete(() => whenTaskCompelete);  //  当所有任务完成后的回调函数
}

int futureTask() {
    return 21; 
}

void printLength(int length) {
    print("Text Length:$length");
}

void whenTaskCompelete() {
    print("Task Complete");
}

2.3 延迟执行

new Future.delayed(const Duration(seconds: 1), () => futureTask);
上一篇 下一篇

猜你喜欢

热点阅读