创建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
这个也很好理解,还是以创建顺序为主,以嵌套为次
网友评论