【发布时间】:2021-12-19 12:06:40
【问题描述】:
我正在做我的第一个 react 网站,我需要帮助来编写一个异步 JavaScript 函数。 在这里,我将用户输入文件上传到 Firebase 存储,然后向 API 发出发布请求以将数据存储在数据库中。但是,由于 firebase 上传需要一些时间才能将数据上传到其存储中,因此 API 请求会在上传完成之前发生,因此数据不会上传到数据库。现在我知道我应该在这里使用 async await 关键字的承诺,但我不知道该怎么做。如果有人可以提供帮助,我将不胜感激。提前致谢!
下面是相关代码sn-p:
const save = (items) => {
items.forEach((item) => {
const fileName = new Date().getTime() + item.label + item.file.name;
const uploadTask = storage.ref(`/items/${fileName}`).put(item.file);
uploadTask.on(
"state_changed",
(snapshot) => {
const progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
console.log("Upload is" + progress + "% done.");
},
(err) => {
console.log(err)
},
() => {
storage.ref("items").child(fileName).getDownloadURL().then((url) => {
setSong((prev) => {
return { ...prev, [item.label]: url };
});
});
}
);
})
console.log(song)
axios.post("songs/create", song);
}
PS:这里的 items 是用户输入文件的数组,每个文件都有一个标签,它是 json 文档中属性的命名方式。 setSong 是一个 useState 函数。这里 JSON 文档已经包含其他用户输入(不是文件),并且 setSong 方法用于将文件的 firebase URL 附加到它。
【问题讨论】:
标签: javascript reactjs asynchronous async-await asynchronous-javascript