Async/Await不适用于alert()-javascript

Async/Await不适用于alert()-javascript,javascript,asynchronous,async-await,Javascript,Asynchronous,Async Await,我希望先执行带有wait关键字的两个函数,然后执行alert()和location.reload async function CompleteUpload(){ await LoadValues(); await UploaderMethod(); alert("Product Added Successfully!"); location.reload();

我希望先执行带有wait关键字的两个函数,然后执行alert()和location.reload

 async function CompleteUpload(){
            await LoadValues();
            await UploaderMethod();
            alert("Product Added Successfully!");
            location.reload();
        }
警报在2个等待函数调用之前弹出,并且在执行这些方法之前重新加载页面。

如果我不在最后放入alert()并重新加载,upload CompleteUpload()工作得非常好

更新了**(在有人回答回复承诺后)

在上传任务结束时,我写了以下内容:

        return new Promise(function(resolve, reject) {
        resolve("yeah");
    }
将完整上载更改为:

function CompleteUpload(){
            LoadValues();
            UploaderMethod().then(Reeeload());
        }

function Reeeload(){
            alert("Product Added Successfully!");
            location.reload();
        }

是不是特别的
alert()
不适用于async/await?如果将
alert()
location.reload()
行替换为类似于
console.log的内容,以查看是否也首先执行该命令,该怎么办


可能是您的
LoadValues()
UploaderMethod()
导致了问题。

这与
警报完全无关

您的
UploaderMethod
被定义为
async
,因此它总是返回一个承诺,但该承诺在上传任务完成之前就解决了(因此它会立即继续执行下一个语句(在
reload
之后是
reload

你应该:

  • 从中删除
    async
    关键字(因为它没有等待任何承诺)
  • 返回使用
    promise
    构造函数创建的承诺
  • 状态\u changed
    事件处理程序中解析该承诺(当所有内容都已解析时)



旁白:
LoadValues
除了完全同步的DOM访问之外,什么都不做。它不应标记为
async
,也不应
等待结果。

等待在顶级代码中不起作用

所以函数()的整数({})使用这个()=>{}就可以了
我从这个网站截图。我也有同样的问题()

我想问题是,
UploaderMethod
返回得太早了。您可能希望返回一个承诺,并在上载完成时调用resolve方法。从我看到的部分来看,我猜它在进行上传调用后返回,而不是等待上传完成。在我单击alert方法上的ok之前,上传不会开始,尽管它已重新加载,因为我已将其放在那里。在这两种方法之前,都会发生alert和location重载,当我删除alert和reload时,如果它们运行得很好,它们怎么会导致问题呢?alert和location reload在异步函数中应该可以正常工作,所以我怀疑问题出在其他两个函数上-可能是
UploaderMethod()
警报
中断页面上的代码执行,重新加载也会取消代码执行。因此,如果您的
上载方法尚未完成,它将被取消。要等待方法完成,请看Quentin的回答是的,我同意,只是意味着它们都应该在其他两个函数之后执行。昆汀的回答应该能满足你的要求。我更新了我的问题,要么我的承诺是错误的,要么它不起作用。完全错误。要么承诺没有从
UploaderMethod
函数返回,要么
resolve
不在
状态\u changed
事件处理程序中。再看看我提到的另一个问题。看看这个,这是我的完整上传方法。我在完成data.set()方法后写下了承诺,它在uploadtask函数中。你的承诺与状态改变事件无关。请看我引用的问题作为示例。好的,我已经尽了最大的努力来理解promise是如何工作的,但是现在我有两个问题,(1)与之前一样,alert仍然首先触发(2)promise在页面加载后立即执行。
function CompleteUpload(){
            LoadValues();
            UploaderMethod().then(Reeeload());
        }

function Reeeload(){
            alert("Product Added Successfully!");
            location.reload();
        }