【问题标题】:React - Async Await Problems with asynchronousReact - 异步等待异步问题
【发布时间】:2018-12-09 21:38:24
【问题描述】:

我正在将文件放入 Firebase 存储中,我浏览了一个图像列表并希望将它们一个一个放入 Firebase 中。但是 Map 不希望完成上传一张图片,它会同时启动所有图片,我希望它是一张一张的。

createProject() {
    let url;
    let prevState = this.state;
    let project = {
        projectName: prevState.projectName,
        description: prevState.description,
        images: [],
    }
    let getUrl = function (url) {
        console.log('DONE' + url);
    }
    prevState.project.images.map(async (image, key) => {
        let url = await this.putFile(image);
        getUrl(url);
    })
}

putFile(file, getUrl) {
    return new Promise(function (resolve, reject) {
        let storageRef = fire.storage().ref('Projects/Images/');
        const image = file;
        const name = file.imageName;
        const metadata = {
            contentType: file.data.type,
        };
        const task = storageRef.child(name).put(image.data, metadata);

        task.on('state_changed', function (snapshot) {
            var progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
            console.log('Upload is ' + progress + '% done');
            switch (snapshot.state) {
                case firebase.storage.TaskState.PAUSED: // or 'paused'
                    console.log('Upload is paused');
                    break;
                case firebase.storage.TaskState.RUNNING: // or 'running'
                    console.log('Upload is running');
                    break;
            }
        }, function (error) {

        }, function () {
            task.snapshot.ref.getDownloadURL().then(function (downloadURL) {
                resolve(downloadURL);
            });
        });

    });
}

我希望 Map 等待最后一个“解决”。

【问题讨论】:

    标签: javascript reactjs firebase asynchronous firebase-storage


    【解决方案1】:

    您可以改用异步 for-of 循环:

    async createProject() {
      // ...
      for (let image of prevState.project.images) {
        let url = await this.putFile(image);
        getUrl(url);
      }
    }
    

    【讨论】:

    • @FILIPPEOLIVEIRADASILVARODR 菲利普没问题!欢迎使用 stackoverflow!
    猜你喜欢
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 2022-10-25
    • 2023-03-12
    • 2022-11-24
    • 2019-03-27
    相关资源
    最近更新 更多