异步函数await不等待

问题描述 投票:0回答:3

我有一个异步函数,可以使用 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;

}

flutter http asynchronous
3个回答
0
投票

中使用await
 request.files.add(
  await http.MultipartFile.fromBytes('File', list, filename: '.mp4'),
);

0
投票

你可以写下下面的语句

 request.send().then((response) {
   if (response.statusCode == 200) {
       return true;
       }
    });

而不是

final response = await request.send();

if (response.statusCode == 200) {
  return true;
}

0
投票

请勿将

.forEach
与异步回调一起使用。相反,如果您想顺序等待每个异步回调,只需使用普通的 for 循环即可:

for (var video in files) {
  await uploadVideo(video);
}
© www.soinside.com 2019 - 2024. All rights reserved.