美文网首页
Future--Demo

Future--Demo

作者: MakerChin | 来源:发表于2019-02-01 16:45 被阅读0次

    创建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中的函数:

    • then:写异步操作逻辑。
    • whenComplete:异步操作完成时的回调。
    • catchError:捕获异常或者异步出错时的回调。
    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
    

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

    相关文章

      网友评论

          本文标题:Future--Demo

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