我在使用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 };
});
}
请帮助实现功能,直到上载过程完成。预先感谢。
答案 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