【问题标题】:Firebase Storage - Wait till all upload tasks are completed before executing functionFirebase 存储 - 等到所有上传任务完成后再执行功能
【发布时间】:2018-12-24 15:33:52
【问题描述】:

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

我想在所有文件上传后执行另一个函数,在 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');
}

【问题讨论】:

    标签: javascript reactjs firebase firebase-storage


    【解决方案1】:

    UploadTask 对象的行为就像 Promise 一样,因为它们有 then() 和 catch() 方法。因此,您可以将它们全部收集到一个数组中,并使用Promise.all() 生成另一个承诺,该承诺会在所有上传完成后解析。

    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');
    });
    

    【讨论】:

    • 还有没有办法在Promise.all回调中的console.log之前执行console.log(downloadURL)?
    • 这听起来像是一个不同的问题,您可能想在这里问。
    猜你喜欢
    • 2018-12-21
    • 2018-04-03
    • 2014-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多