Firebase存储-等待所有上传任务完成后再执行功能



我正在使用以下代码将一个或多个文件上传到Firebase Storage。上传完成后,下载URL将记录在控制台中。

我想在上传完所有文件后,在forEach函数之外执行另一个函数。当所有上传任务都完成后,我如何打印控制台日志?

onSubmit = e => {
e.preventDefault();
const { files } = this.state;
files.forEach(file => {
const uploadTask = Storage.ref(`files/${file.name}`).put(file);
uploadTask.on('state_changed', snapshot => {
const progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
console.log(progress);
}, error => { console.log(error) }, () => {
uploadTask.snapshot.ref.getDownloadURL().then(downloadURL => {
console.log(downloadURL);
});
});
});
//Wait till all uploads are completed
console.log('all uploads complete');
}
UploadTask对象的行为就像promise,因为它们有then((和catch((方法。因此,您可以将它们全部收集到一个数组中,并使用Promise.all()生成另一个promise,该promise在所有上传完成时解析。
const promises = [];
files.forEach(file => {
const uploadTask = Storage.ref(`files/${file.name}`).put(file);
promises.push(uploadTask);
uploadTask.on('state_changed', snapshot => {
const progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
console.log(progress);
}, error => { console.log(error) }, () => {
uploadTask.snapshot.ref.getDownloadURL().then(downloadURL => {
console.log(downloadURL);
});
});
});
Promise.all(promises).then(tasks => {
console.log('all uploads complete');
});

最新更新