首先贴一下教程:
http://dart.goodev.org/tutorials/language/futures
在async-and-await部分中,有一段代码,我修改了一下,如下
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:html';
import 'dart:async';
Future printDailyNewsDigest() async {
print('printDailyNewsDigest 1');//1
String news = await gatherNewsReports();
print('printDailyNewsDigest 2');//7
print(news);//8
}
main() {
printDailyNewsDigest();
printWinningLotteryNumbers();//3
printWeatherForecast();//4
printBaseballScore();//5
}
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');
}
// Imagine that this function is more complex and slow. :)
Future gatherNewsReports() async {
print('gatherNewsReports1');//2
String path = 'https://www.dartlang.org/f/dailyNewsDigest.txt';
var result = await HttpRequest.getString(path);
print('gatherNewsReports2');//6
return result;
}
其中后面注释的数字是我添加的,代表了输出顺序。
我看了下文档,总结了一下,在dart遇到await语句的时候,如果这个await调用的函数里还调用了其他async函数,比如上面的printDailyNewsDigest
就又调用了gatherNewsReports
,这时候printDailyNewsDigest
会执行到gatherNewsReports
函数里的await语句之前的代码,如果还有更多的await语句以此类推会一直执行到最后一个async的await语句之前然后返回Future,然后执行下面的非async部分的代码,在执行完以后会从最后一个await语句开始执行,然后就是上面的输出顺序。
如果理解的不正确欢迎指正