【发布时间】:2019-02-16 13:05:55
【问题描述】:
我正在尝试找出 Dart 中的异步/等待问题。我正在调用一个简短的 http 获取序列,并希望等待它们。我创建了这个示例代码来演示这个问题。
我希望看到“开始测试”,然后是每个下载按顺序开始。然后每个下载都会以随机顺序完成,然后我会看到“结束测试”。但是,在任何下载开始之前,我都会看到“结束测试”。
请帮助我理解我做错了什么。
import 'dart:async';
import 'package:http/http.dart' as http;
class AsyncTest {
final _resourceList = [
{
'name': 'Test 1',
'url': 'https://jsonplaceholder.typicode.com/posts'
},
{
'name': 'Test 2',
'url': 'https://jsonplaceholder.typicode.com/comments'
},
{
'name': 'Test 3',
'url': 'https://jsonplaceholder.typicode.com/albums'
},
{
'name': 'Test 4',
'url': 'https://jsonplaceholder.typicode.com/photos'
},
{
'name': 'Test 5',
'url': 'https://jsonplaceholder.typicode.com/users'
},
];
void beginTest() async {
print('begin test');
await getAll();
print('end test');
}
Future<void> getAll() async {
_resourceList.forEach((resource) async {
print('begin ${resource['name']}');
final response = await http.get(resource['url']);
print('end ${resource['name']}');
});
}
}
这是输出。
flutter: begin test
flutter: end test
flutter: begin Test 1
flutter: begin Test 2
flutter: begin Test 3
flutter: begin Test 4
flutter: begin Test 5
flutter: end Test 1
flutter: end Test 5
flutter: end Test 3
flutter: end Test 2
flutter: end Test 4
【问题讨论】:
标签: dart