AsyncAwait不等待提取响应

时间:2019-09-13 11:11:53

标签: javascript java reactjs asynchronous async-await

我在使用aysnc和await执行API调用时遇到问题。我正在使用fetch方法来调用Spring Boot服务,该服务在上传文件后返回JSON字符串。在获取上传文件数据的状态之前,正在执行下一个代码。帮我解决问题。以下是我编写的代码-

endProgressSimulation(uploadingFiles) {
        this.setState(({ acceptedFiles }) => {
            const updatedFiles = acceptedFiles.map(file => {
                if (uploadingFiles.map(loadingFile => loadingFile.name).includes(file.name)) {
                    const formData = new FormData();
                    formData.append('file', file);

                    const requestAwait = async() => {
                        console.log("Sending fetch");
                        const response = await fetch('http://localhost:5002/Upload/',{
                            method: 'post',
                            body:formData
                             })
                             console.log("Got response...");
                        const json = await response.json();
                        console.log("async/await based");
                        console.log(json);
                    }
                    requestAwait();

                    file.uploaded = true;
                    return file;

                } else {
                    file.uploaded = false;
                    return file;
                }
            });
            return { acceptedFiles: updatedFiles };
        });
}

请帮助实现功能,直到上载过程完成。预先感谢。

2 个答案:

答案 0 :(得分:0)

requestAwait正在等待fetch,但是调用方函数没有在等待requestAwait

另外,通过几个并行的API调用,我认为使用Promise.all()而不是async-await配方会更好。

答案 1 :(得分:0)

代码未在等待,因为anchorNode是一个承诺。因此,当您强制转换const requestAwait时,代码将继续执行requestAwait(),而无需等待功能结束。

现在,要使其正常工作,必须在此处的地图内添加ASYNC:

file.upload = true

然后在投射acceptedFiles.map( async (file) => { ...function } ) 之前。

requestAwait