Dart
实现异步有两种方法:
1:使用async和await
2:使用Future API
一个方法被async标记后,则他的返回值类型为Future:
例如:
//这个是同步的
String lookUpVersionSync() => '1.0.0';
//这个是异步的
Future<String> lookUpVersion() async => '1.0.0';
当时由于不知道async返回值是Future导致我下面得程序一直不知道哪里错了~
返回值写成String程序报错,因为async返回的类型是Future,所以我应该将返回类型改成Future
1.Async的使用:
import 'dart:async';
void main(){
printDatilNewsDigest();
printWinningLotteryNumbers();
printWeatherForecast();
printBaseballScore();
new Future(()=>printWinningLotteryNumbers());
}
Future<void> printDatilNewsDigest() async{
var newsDigest = await gatherNewsReports();
print(newsDigest);
}
const news = '<gathered news goes here>'; //const等于final
const oneSecond = Duration(seconds: 1);
Future<String> gatherNewsReports(){
return Future.delayed(oneSecond,()=>news);
}
printWinningLotteryNumbers() {
print('Winning lotto numbers: [23, 63, 87, 26, 2]');
}
printWeatherForecast() {
print("Tomorrow's forecast: 70F, sunny.");
}
printBaseballScore() {
print('Baseball score: Red Sox 10, Yankees 0');
}
2.Future的使用
void main() {
new Future(() => futureTask()) // 异步任务的函数
.then((m) => ds("$m")) // 任务执行完后的子任务
.then((m) => m.length) // 其中m为上个任务执行完后的返回的结果
.then((m) => printLength(m))
.whenComplete(() => whenTaskCompelete); // 当所有任务完成后的回调函数
}
double futureTask() {
return 2.2;
}
String ds(String ds) {
print(ds);
return ds;
}
void printLength(int length) {
print("Text Length:$length");
}
void whenTaskCompelete() {
print("Task Complete");
}
3.用两种方法描述同一个方法
Future<void> printWithDelay(String message) async {
await Future.delayed(const Duration(seconds: 1));
print(message);
}
Future<void> printWith(String message) {
return Future.delayed(const Duration(seconds: 1)).then((_) => print(message));
}