Javascript Awat不';不要等待异步
我不熟悉async并等待,我有一个带有firebase的简单web应用程序,它通过输入字段获取文件,并通过单击按钮将其上载到firebase,但当我单击按钮时,它会这样做,我不会等待async函数在第一次单击时加载文件。但是当我第二次点击上传的文件时,我得到了预期的输出。我怎样才能解决这个问题? 这是我的密码 上传功能 按钮点击功能Javascript Awat不';不要等待异步,javascript,asynchronous,async-await,Javascript,Asynchronous,Async Await,我不熟悉async并等待,我有一个带有firebase的简单web应用程序,它通过输入字段获取文件,并通过单击按钮将其上载到firebase,但当我单击按钮时,它会这样做,我不会等待async函数在第一次单击时加载文件。但是当我第二次点击上传的文件时,我得到了预期的输出。我怎样才能解决这个问题? 这是我的密码 上传功能 按钮点击功能 谢谢大家,我解决了这个问题,我将在下面添加我的代码 上传功能 按钮点击功能 我遇到的问题是,当我单击按钮时,它显示一个空数组,因为文件上载需要一些时间,但当我第二次
谢谢大家,我解决了这个问题,我将在下面添加我的代码 上传功能 按钮点击功能 我遇到的问题是,当我单击按钮时,它显示一个空数组,因为文件上载需要一些时间,但当我第二次单击时,它显示预期的输出,因为文件已上载。所以我把等待加入了队伍
imageRef.put(testFile) ............
所以它解决了我的问题。谢谢大家的支持。你有没有用
wait upload()或upload()调用upload
。然后(什么事)
?(或者可能两者都没有,这可能是问题所在。)你的问题组织得很奇怪:在标题“上载函数”下,我们看到一些代码(不是函数),在标题“按钮单击函数”下,我们看到一个名为上载
的函数。然后有一个变量uploadImages
,它总是被分配undefined
,但在upload
函数中,您将其作为函数调用。。。我无法理解这一点。上传图像
似乎不是/返回承诺。请看一看。我遇到的问题是,等待函数在文件上载之前执行,并返回一个未定义的值。您没有等待此链:imageRef.put(file)
-因为您有异步等待-删除。然后
链。
async function upload(){
await uploadImages().then((data) => {
if (data != 1) {
paragraphData = paragraphData.map(
function (x, i) {
return {
Title: x.Title,
Paragraph: x.Paragraph,
Image: data[i],
};
}.bind(this)
);
console.log(paragraphData);
//dispatch("paragraphData",{data})
} else {
console.log("d");
}
});
}
async function uploadImages() {
var storageRef = firebase.storage().ref();
for (const file of document.getElementsByName("fupload")) {
// let test = (file as HTMLInputElement).files[0].name;
// console.log(test);
var imageRef = storageRef.child(
"projects/" + projectName + "/" + (file as HTMLInputElement).files[0].name
);
let test = (file as HTMLInputElement).files[0].name;
let testFile = (file as HTMLInputElement).files[0];
await imageRef.put(testFile).then((snapshot) => {
snapshot.ref.getDownloadURL().then(function (downloadURL) {
paragraphUrl.push(downloadURL);
});
});
}
return paragraphUrl;
}
async function submitParagraphData() {
paragraphTitles = [];
paragraphs = [];
var e = document.getElementsByName("ParagrphTitle").forEach((element) => {
paragraphTitles.push((element as HTMLInputElement).value);
});
var f = document.getElementsByName("Paragraph").forEach((element) => {
paragraphs.push((element as HTMLInputElement).value);
});
let paragraphData = paragraphTitles.map(
function (x, i) {
return { Title: x, Paragraph: paragraphs[i] };
}.bind(this)
);
await uploadImages().then((data) => {
console.log(data);
});
}
imageRef.put(testFile) ............