匿名函数
1 2 3 4 5 6 7 8 9 10
| test(Function calback) { calback("hello"); }
main() { test((param) { // Print hello print(param); }); }
|
函数作为变量
1 2 3 4
| var say = (str) { print(str); }; say("Hello, World!");
|
异步
Future
表示一个异步操作的最终完成(或失败)及其结果值的表示
Future.delayed
: 创建一个延时任务
Future.then
:接受异步结果
1 2 3 4 5
| Futrue.delayed(new Duration(seconds: 2), () { return "Hello, World!"; }).then(data) { print(data); });
|
Future.wait
只有数组中 所有Future
都执行成功后,才会触发 then
的成功回调,只要有一个
Future
执行失败,就会触发错误回调
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| Future.wait([ // 2秒后返回结果 Future.delayed(new Duration(seconds: 2), () { return "Hello, "; }), // 4秒后返回结果 Future.delayed(new Duration(seconds: 4), () { return "World!"; }) ]).then((results) { print(results[0] + results[1]); }).catchError((e) { print(e); });
|
- Dart提供了类似ES7中的
async
, await
等异步操作
async
和 await
往往是成对出现的,如果一个方法中有耗时的操作,你需要将这个方法设置成 async
,并给其中的耗时操作加上 await
关键字,如果这个方法有返回值,你需要将返回值塞到 Future
中并返回
1 2 3 4 5 6 7 8 9 10 11 12 13
| import 'dart.async'; import 'package:http/http.dart' as http;
Future<String> getNetData() async { http.Response res = await.get("http://www.baidu.com"); return res.body; }
main() { getNetData().then((str) { print(str); }); }
|