Future--Demo

2019-02-01  本文已影响0人  MakerChin

创建Future

Future future = new Future((){});

(){}为Future的回调
例如:

main() {
  testFuture2();
}

void testFuture() {
  Future future1 = new Future(() => print('1'));
  Future future2 = new Future(() => print('2'));
}
//输出结果为:
1
2
Flutter相关回调函数

future中的函数:

Future asyncDemo() async{
  Future<Null> future = new Future(() => null);
  await  future.then((_){
    print("then");
  }).then((){
    print("whenComplete");
  }).catchError((_){  
    print("catchError");
  });
}

这里的then操作可以理解为,然后。

多个Future情况下的执行顺序

首先创建三个Future

void testFutureCreate1(){
  Future f1 = new Future(() => null);
  Future f2 = new Future(() => null);
  Future f3 = new Future(() => null);
  f1.then((_) => print("1"));
  f2.then((_) => print("2"));
  f3.then((_) => print("3"));
}
//执行结果为
1
2
3

将创建顺序打乱

void testFutureCreate2(){
  Future f2 = new Future(() => null);
  Future f1 = new Future(() => null);
  Future f3 = new Future(() => null);
  f1.then((_) => print("1"));
  f2.then((_) => print("2"));
  f3.then((_) => print("3"));
}
//输出结果为
2
1
3

创建顺序不乱,then的顺序打乱

void testFutureCreate3(){
  Future f1 = new Future(() => null);
  Future f2 = new Future(() => null);
  Future f3 = new Future(() => null);
  f3.then((_) => print("3"));
  f1.then((_) => print("1"));
  f2.then((_) => print("2"));
}
//输出结果为
1
2
3

创建多个Future,执行顺序和创建Future的先后顺序有关,如果只是单独的调用then函数(没有嵌套使用then函数的话),和调用then函数的先后顺序有关。

then函数嵌套使用
void testThen1() {
  Future f1 = new Future(() => null);
  Future f2 = new Future(() => null);
  Future f3 = new Future(() => null);
  f1.then((_) => print("f1 -> f1"));
  f2.then((_) {
    print("f2 -> f2");
    f1.then((_) => print("f2.then -> f1"));
  });
  f3.then((_) => print("f3 -> f3"));
}
//输出结果为
f1 -> f1
f2 -> f2
f2.then -> f1
f3 -> f3

首先按照创建顺序去输出
f1 -> f1
f2 -> f2
f3 -> f3
因为f2.then -> f1嵌套在f2中,所以输出在f3前

void testThen2() {
  Future f1 = new Future(() => null);
  Future f2 = new Future(() => null);
  Future f3 = new Future(() => null);
  f2.then((_) {
    print("f2 -> f2");
    f1.then((_) => print("f2.then -> f1"));
  });
  f1.then((_) => print("f1 -> f1"));
  f3.then((_) => print("f3 -> f3"));
}
//输出结果为
f1 -> f1
f2 -> f2
f2.then -> f1
f3 -> f3

这个当然也很好理解,顺序由创建顺序决定,嵌套的优先级低于外层,高于创建顺序之后的

void testThen3() {
  Future f1 = new Future(() => null);
  Future f2 = new Future(() => null);
  Future f3 = new Future(() => null);
  f1.then((_) => print("f1 -> f1"));
  f3.then((_) {
    print("f3 -> f3");
    f1.then((_) => print("f3.then -> f1"));
  });
  f2.then((_) => print("f2 -> f2"));
}
//输出结果为
f1 -> f1
f2 -> f2
f3 -> f3
f3.then -> f1
void testThen4() {
  Future f1 = new Future(() => null);
  Future f2 = new Future(() => null);
  Future f3 = new Future(() => null);
  f1.then((_) => print("f1 -> f1"));
  f3.then((_) {
    print("f3 -> f3");
    new Future(() => print("f3.then -> new Future"));
    f1.then((_) => print("f3.then -> f1"));
  });
  f2.then((_) => print("f2 -> f2"));
}
//结果为
f1 -> f1
f2 -> f2
f3 -> f3
f3.then -> f1
f3.then -> new Future

这个虽然说在里面创建了一个Future,但是它是最后一个创建的,即使位置在内层f1之前,但是仍然是后执行。

void testAll() {
  Future f3 = new Future(() => null);
  Future f1 = new Future(() => null);
  Future f2 = new Future(() => null);
  Future f4 = new Future(() => null);
  Future f5 = new Future(() => null);
  
  f3.then((_) => print("f3.then -> f3"));
  f2.then((_) => print("f2.then -> f2"));
  f4.then((_) => print("f4.then -> f4"));
  f5.then((_) {    print("f5.then -> f5");
    new Future(() => print("f5.then -> new Future"));
    f1.then((_) {
      print("f1.then -> f1");
    });
  });
}
//结果是
f3.then -> f3
f2.then -> f2
f4.then -> f4
f5.then -> f5
f1.then -> f1
f5.then -> new Future

这个也很好理解,还是以创建顺序为主,以嵌套为次

上一篇下一篇

猜你喜欢

热点阅读