Flutter 异步函数等待不等待
Flutter async function await not awaiting
我有一个使用 MultipartRequest 上传视频的异步函数:
static Future<bool> uploadVideo(File video) async {
var uri = Uri.parse('https://example.com/uploadFile');
Map<String, String> headers = {
"Content-Type": "application/json",
'Accept': 'application/json',
};
var request = http.MultipartRequest("POST", uri);
request.headers.addAll(headers);
Uint8List data = await video.readAsBytes();
List<int> list = data.cast();
request.files.add(
await http.MultipartFile.fromBytes('File', list, filename: '.mp4'),
);
final response = await request.send();
if (response.statusCode == 200) {
return true;
}
return false;
当我通过以下方式调用函数时:
Future<List<File>> files;
print("--1--");
files.then((videos) {
videos.forEach((video) async {
// this call must be await but is not
await uploadVideo(video);
});
print("--2--");
});
print("--3--");
控制台显示:
--1--
--3--
--2--
说明await函数没有await,请问是什么原因?
使用此代码
List<File> videos = await files;
print("--1--");
for (var video in videos) {
await uploadVideo(video);
print("--2--");
}
print("--3--");
}
--1--等待文件
--2-- 正在上传视频(--2-- 会打印多次)
--3-- 完成
我有一个使用 MultipartRequest 上传视频的异步函数:
static Future<bool> uploadVideo(File video) async {
var uri = Uri.parse('https://example.com/uploadFile');
Map<String, String> headers = {
"Content-Type": "application/json",
'Accept': 'application/json',
};
var request = http.MultipartRequest("POST", uri);
request.headers.addAll(headers);
Uint8List data = await video.readAsBytes();
List<int> list = data.cast();
request.files.add(
await http.MultipartFile.fromBytes('File', list, filename: '.mp4'),
);
final response = await request.send();
if (response.statusCode == 200) {
return true;
}
return false;
当我通过以下方式调用函数时:
Future<List<File>> files;
print("--1--");
files.then((videos) {
videos.forEach((video) async {
// this call must be await but is not
await uploadVideo(video);
});
print("--2--");
});
print("--3--");
控制台显示:
--1--
--3--
--2--
说明await函数没有await,请问是什么原因?
使用此代码
List<File> videos = await files;
print("--1--");
for (var video in videos) {
await uploadVideo(video);
print("--2--");
}
print("--3--");
}
--1--等待文件
--2-- 正在上传视频(--2-- 会打印多次)
--3-- 完成