我有一个异步函数,可以使用 MultipartRequest 上传视频。 当我调用异步函数“uploadVideo”时,通过:
Future<List<File>> files;
files.then((mediaFiles) {
mediaFiles.forEach((element) async {
await uploadVideo(element, userid))
});
});
视频已上传,但在完成上传之前会运行下一个功能。为什么等待不等待?
static Future<bool> uploadVideo(File video, int userID) 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.fields['userID'] = userID.toString();
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;
}
在
中使用await request.files.add(
await http.MultipartFile.fromBytes('File', list, filename: '.mp4'),
);
你可以写下下面的语句
request.send().then((response) {
if (response.statusCode == 200) {
return true;
}
});
而不是
final response = await request.send();
if (response.statusCode == 200) {
return true;
}
请勿将
.forEach
与异步回调一起使用。相反,如果您想顺序等待每个异步回调,只需使用普通的 for 循环即可:
for (var video in files) {
await uploadVideo(video);
}