【发布时间】:2020-09-30 17:48:02
【问题描述】:
我希望先执行带有 await 关键字的两个函数,然后执行 alert() 和 location.reload。
async function CompleteUpload(){
await LoadValues();
await UploaderMethod();
alert("Product Added Successfully!");
location.reload();
}
警报会在 2 个 await 函数调用之前弹出,并且页面会在这些方法执行之前重新加载。
async function LoadValues(){
prName = document.getElementById('NAMEbox').value;
proc = document.getElementById('PROCbox').value;
}
async function UploaderMethod(){
var uploadTask = firebase.storage().ref("Laptops/Img" + id+".png").put(files[0]);
uploadTask.on('state_changed', function(snapshot){
}, .... //firebase upload data function
如果我不放 alert() 并在最后重新加载,则上传 CompleteUpload() 可以完美运行。
已更新**(在有人回答有关返回承诺后)
在上传任务结束时我写了这个:
return new Promise(function(resolve, reject) {
resolve("yeah");
}
将完整上传更改为:
function CompleteUpload(){
LoadValues();
UploaderMethod().then(Reeeload());
}
function Reeeload(){
alert("Product Added Successfully!");
location.reload();
}
【问题讨论】:
-
我认为问题在于,
UploaderMethod返回得太早了。您可能希望返回一个 Promise 并在上传完成时调用 resolve 方法。从我看到的部分来看,我猜它会在进行上传调用后返回,而不是等待上传完成 -
在我点击警报方法上的“确定”之前上传没有开始,虽然它重新加载了,因为我已经把它放在那里了。
标签: javascript asynchronous async-await