javascript - React - 异步等待异步问题

标签 javascript reactjs firebase asynchronous firebase-storage

我将文件放入 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 等待最后一次“解决”。

最佳答案

您可以使用异步 for-of循环代替:

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

关于javascript - React - 异步等待异步问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51122960/

相关文章:

javascript - Bootstrap 导航栏切换与下拉菜单不同步

javascript - Wicket - 附加 Javascript(什么是更好的做法?)

ruby-on-rails - 本地运行 React/Rails 应用程序

swift - 查询文档中的 Firestore Map 属性

javascript - 如何使用 javascript 加载表单?

javascript - 应用程序模块不可用、拼写错误或忘记加载 - 在 grunt 构建之后

javascript - 将 redux-react 与 react-router 一起使用时无效的 prop 'component'

node.js - 在已部署的应用程序上播放来自 s3 的文件时出现跨源资源策略问题

Python Flask 上传文件

ios - 在范围内找不到类型 GIDSignInDelegate